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 8, 7

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

そのため、普段からJST(日本標準時)で運用してる場合は、ホストのタイムゾーンはJSTに統一しておいた方がよいだろう。

CentOS 8, 7の場合

CentOS 8, 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
...以下略

タイムゾーン変更後について

ログに表示されるタイムスタンプにタイムゾーンを反映させるには各種サービスを再起動する必要がある。そのため、可能であればタイムゾーンの設定を変更した後にホスト自体を再起動することを推奨する。

すぐにホストの再起動をすることが難しい場合は、rsyslogと主要なサービスを再起動しておくと良いだろう。

# systemctl restart rsyslog.service

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

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

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

dd if=/dev/zero of=/swapfile bs=1M count=2048
mkswap /swapfile
chmod 600 /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 7の場合は、swaponの実行時に、スワップファイルのパーミションについて次の様な警告が出ることがあります。

swapon: /swapfile: insecure permissions 0644, 0600 suggested.

念のため一旦swapoffでスワップを無効化してから、スワップファイルを推奨のパーミッションである0600に変更し、改めてswaponを実行するとよいでしょう。

swapoff /swapfile
chmod 0600 /swapfile
swapon /swapfile

CentOS/Rocky LinuxのOSバージョンを確認する

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

$ cat /etc/redhat-release
Rocky Linux release 8.5 (Green Obsidian)

制限付き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