はじめに
例えばバックアップをしたいとき,ファイルを定期的に送信するため,cronとrsyncを用いることがあります.今回は,バックアップを目標とした手順を述べます.
環境
今回はESXiでVMを作成しています.
VMの構成は以下の通りです.
VM 構成情報 (ファイルサーバ)
・OS Ubuntu-20.04.2
・vCPU 2 コア
・RAM 8GB
・HDD 220GB
VM 構成情報 (バックアップサーバ)
・OS Ubuntu-20.04.2
・vCPU 2 コア
・RAM 8GB
・HDD 120GB
ファイルサーバから,バックアップサーバのbackupというディレクトリにファイルを送信します.
cron
cronは,プログラムを自動実行するためのデーモンです.
人によってこの設定場所は違いますが,今回は/etc/cron.dで作成した場合を想定します.
バックアップ用のシェルスクリプト作成
今回は,バックアップをすることを想定したシェルスクリプトを作成します.
expect -c "
set timeout 3
spawn rsync -av [file-name] [user-name]@[host-name]:~/backup
expect \"password:\"
send -- \"hogehoge\r\"
expect eof
exit
"
rsyncはsshを用いるため,パスワードを聞かれます.自動でパスワードを入力するため,expectを用います.
sudo apt install expect
最後にinteractを用いるサイトがありますが,これは標準入出力をシェルに戻すためのコマンドなので,cronでは実行できず処理が止まります.これによりファイルを送信できないことがあるため気を付けましょう.
次に,backup.shに実行権限を付与します.
$ sudo chmod +x backup.sh
cronの実行場所
cronの設定場所には
・/var/spool/cron/crontabs/[USER]
・/etc/crontab
・/etc/cron.hourly
・/etc/cron.daily
・/etc/cron.monthly
・/etc/cron.weekly
・/etc/cron.d
があります[1].
また,ネットで検索すると
・crontab -eでvar/spool/cron/crontabs/[USER]に書き込む方法
・/etc/cron.d内にファイルを作成する方法
・/etc/cron.(hourly|daily|weekly|monthly)/内に設定する方法
・/etc/crontabで設定する方法
があります[2].
個人的には,crontab -rで間違えて設定を削除しないよう,/etc/cron.d内に設定するのがよさそうです.cron.dは本来インストールされたパッケージ専用のディレクトリらしいですが,プロジェクトや担当者毎にファイルを分けられます.
cronの設定
cron.d内にcron実行用のファイルを作成します.
エディタはお好きなものを使ってください.今回はvimを使用します.
$ cd /etc/cron.d
$ sudo vim cron_test
cron_test内に実行したいファイルを追記します.
*/1 * * * * user /home/user/backup.sh
今回はテストを兼ねて,一分間隔で送信する設定にしました.
送信先(今回はバックアップサーバのbackupディレクトリ)にファイルがあれば成功です.
$ watch ls backup
と入力すると,backupディレクトリにファイルが送信されるかを毎回lsで確認しなくてよいです.
ファイルが送信されない場合
$ cat /var/log/syslog | grep cron -i
で,cronに関するログを見ることができます.
(No MTA installed, discarding output)
と表示されている場合,
$ sudo apt install postfix
$ sudo apt install mailutils
でインストールしてください.
ログを確認できるようになります.
postfixのインストール時は,今回local onlyを選択しました.
また,
$ mail
でもログを確認できるようになります.
参考文献
[1]penpenメモ,”色々なcronの場所と違い【Ubuntu 18.04.4 LTS】”,https://penpen-dev.com/blog/cron/
[2]とーますメモ,”【cron】改めてcronの設定方法について勉強し直してみた”,https://thoames.hatenadiary.jp/entry/2018/12/30/101021