cron(crontab)の環境変数設定 メール送信先(MAILTO) PATH

CentOSにおいて、定期的にコマンドを実行するcronを使用する際、特に設定しない場合は、実行されたコマンドの出力が設定ユーザ宛にメールで送信される。

このコマンド実行結果の出力のメール送信先を変更したい場合はcrontabMAILTO環境変数をすればよい。

$ crontab -e
---------------------------------
MAILTO=user@example.com

*/5 * * * * /home/username/env.sh
---------------------------------

またcron実行環境(環境変数)は普通にユーザとしてログインした場合と違っているため、ログインして直接実行できてもcronを経由すると実行できないということがある。

例えば、cron実行環境では下記のような最低限のPATHが設定された状態のため、後からインストールした/usr/local/binにあるコマンドなど、PATHに含まれないコマンドはスクリプト内に記述しても実行できない。(もちろん、絶対PATHを指定したコマンドであれば実行される。)

PATH=/usr/bin:/bin

このように、cronでコマンドを実行できない理由がPATHにある場合はPATH環境変数をcrontabに設定すれば解決する。

$ crontab -e
---------------------------------
MAILTO=user@example.com
PATH=/usr/bin:/bin:/usr/local/bin

*/5 * * * * /home/username/env.sh
---------------------------------

ちなみに、実行するのがシェルスクリプトならばスクリプト内にPATHを書いても同様に解決する。スクリプト毎にPATHを書くのが面倒な場合はcrontabに書いてしまう方法がよいだろう。

タイムゾーンを日本時間(JST)に変更する CentOS 7, 6

DigitalOceanなど海外のサーバを借りると、タイムゾーンがUTCになっていて、ログをみても時間の感覚がつかめなかったり、ログの情報を読む際に日本時間と勘違いしてしまったりする。

普段からJSTで運用してる場合は、タイムゾーンはJSTに統一しておいた方がよいだろう。

CentOS 7の場合

CentOS 7ではタイムゾーンはtimedatectlコマンドで設定する。

# timedatectl set-timezone Asia/Tokyo
# timedatectl status
Local time: Wed 2015-10-28 08:14:11 JST
Universal time: Tue 2015-10-27 23:14:11 UTC
RTC time: Tue 2015-10-27 23:14:11
Timezone: Asia/Tokyo (JST, +0900)
NTP enabled: n/a
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a

設定できるタイムゾーンはlist-timezonesサブコマンドで確認できる。

# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
...以下略

CentOS 6の場合

CentOS 6の場合は/usr/share/zoneinfo/Japan/etc/localtimeにコピーすることでタイムゾーンを設定することができる。

# date
Thu Apr  9 02:19:48 UTC 2015
# cp /usr/share/zoneinfo/Japan /etc/localtime
cp: overwrite `/etc/localtime'? y
# date
Thu Apr  9 11:19:54 JST 2015

ログの時間にタイムゾーンを反映させるには各種サービスを再起動する必要があるので、サーバ自体を再起動することをおすすめする。

スワップファイル(swap)を作成して有効にする

VPSを借りるとスワップパーティションがないことがあります。
メモリが足りないとコマンド自体がうまく動かないこともあるので、スワップ領域は欲しいところです。
スワップ用に使えるパーティションがないこともあるので、スワップファイルを作成して有効にする方法を紹介します。

ここでは、/swapfileに2GBのスワップファイルを作成することにします。

dd if=/dev/zero of=/swapfile bs=1M count=2048
mkswap /swapfile

つぎに、作成したスワップファイルを有効にしてswapon -sfreeコマンドで確認します。

# swapon /swapfile
# swapon -s
Filename				Type		Size	Used	Priority
/swapswapfile                               file		2097144	0	-1
# free
total       used       free     shared    buffers     cached
Mem:       1020400     292632     727768          0      79468     129184
-/+ buffers/cache:      83980     936420
Swap:      2097144          0    2097144

次回、サーバ起動時にも有効になるようにfstabに記述をしておきます。
念のため、サーバを再起動してもスワップが有効になるか確認することを推奨します。

vi /etc/fstab
-------------------------------------
/swapfile               swap                   swap    defaults        0 0
-------------------------------------

CentOSのバージョン確認方法

redhat-releaseというファイルにCentOSのバージョンが記載されている。

cat /etc/redhat-release
-------------------------------------
CentOS release 5.5 (Final)
-------------------------------------

制限付きSSHログインシェル rsshのインストール

SCP、SFTPは許可したいけれどもSSHでのログインはセキュリティ上、拒否したいという場合にはログインシェルにrsshをユーザに設定することで実現できる。

SRPMからのリビルドとなるのでrpmbuildをインストールする。

yum -y install rpm-build

また、ビルドに必要なgccなどがないならば同様にyumでインストールしておく。

cd /usr/local/src/
wget http://jaist.dl.sourceforge.net/sourceforge/rssh/rssh-2.3.2-1.src.rpm
rpmbuild --rebuild rssh-2.3.2-1.src.rpm
rpm -ihv  /usr/src/redhat/RPMS/i386/rssh-2.3.2-1.i386.rpm
vi /etc/shells
------------------------------------
/usr/bin/rssh
------------------------------------
vi /etc/rssh.conf
------------------------------------
allowscp
#allowsftp
------------------------------------

CentOSでキーボード配列の変更

インストール時にキーボード配列をusにしてしまった場合、後からも配列を変更できます。
日本語配列のキーボードで無理くり入力しなくてもよくなります。

vi /etc/sysconfig/keyboard
---------------------------
KEYBOARDTYPE="pc"
KEYTABLE="jp106"
---------------------------
shutdown -r now

インストール後にファイアウォール・SELinuxを無効にする

CentOS 6

CentOS 6ではsystem-config-securitylevel-tuiが無くなったので、ファイアウォールとSELinuxをそれぞれ別に設定する。

ファイアウォールはsystem-config-firewall-tuiコマンドで設定できる。

system-config-firewall-tui

もし、コマンドがない場合はyumでインストールする。

yum install system-config-firewall-tui

無効にしたい場合は「ファイアーウォール」の有効のチェックを外してOKボタンを実行すれば良い。
チェックのON、OFFはスペースキーで切り替える。

centos6_firewall.png

SELinuxは手動で無効にする。現在の設定はgetenforceで確認できる。

# getenforce
Enforcing

SELinuxを無効にするにはsetenforceに引数0を与える。(実際にはPermissiveモードになる。)

# setenforce 0
# getenforce
Permissive

このままだとサーバを再起動するとまた有効になってしまうので、
再起動時にも無効になるようにするには/etc/selinux/configを編集しておく。

# vi /etc/selinux/config
SELINUX=disabled

参考記事: SELinuxを無効化する | Smart -Web Magazine


CentOS 5

CentOSをインストール後、再起動直後にファイアウォールの設定ができる。

それをそのままにしておくと通常のログイン画面になってしまうが、system-config-securitylevel-tuiコマンドであとからでもファイアウォールが設定できる。

system-config-securitylevel-tui

Security Level:をDisabledにチェック、SELinux:もDisabledを選択すればファイアウォールが無効になる。

firewall.png

コマンドだけでGUIを使わずに設定することもできるので、シェルスクリプトなどで一括処理する場合に便利。

system-config-securitylevel-tui -q --disabled --selinux='disabled'

fdisk ハードディスクのパーティションを確認するコマンド

CentOS Linuxにおいてdfではわかりにくいハードディスクのパーティションを確認するコマンド

fdisk -l /dev/hda
---------------------------------------------------------------------------
Disk /dev/hda: 750.1 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1        2550    20482843+  83  Linux
/dev/hda2            2551        5100    20482875   83  Linux
/dev/hda3            5101        6375    10241437+  83  Linux
/dev/hda4            6376       91201   681364845    5  Extended
/dev/hda5            6376        6630     2048256   82  Linux swap
/dev/hda6            6631       91201   679316526   83  Linux
---------------------------------------------------------------------------

ログアウト後もバックグラウンド処理 nohup

TeraTermなどの仮想端末からアクセスをしてコマンドを実行したい。
だけど、tarによるバックアップなど時間が確実にかかる。
しかも、パソコン端末ももうすぐ停止しなければいけない。
そんなときには、プロセスをバックグラウンドで処理してログアウトすることができる。
通常、ログアウトするとプロセスも消えてしまうが、nohupコマンドを付け加えてハングアップシグナルを無視することでバックグラウンド処理がログアウト後も継続して実行される。

nohup command &
nohup tar home-backup.tgz /home &

【nohup Manpage】
http://www.linux.or.jp/JM/html/gnumaniak/man1/nohup.1.html

quota情報の一覧 repquota

quotaで設定した情報はrepquota コマンドで一覧にすることができます。

repquota -av

hogeと同じ設定をmogeにもしたい場合は-pオプションで設定できる。

edquota -p hoge moge