ラズベリーパイ4にて定期実行させるタスクを登録させるためにcronを用いました。その時の調査内容をまとめます。 ※OSはRaspbianです。
cronのログを有効化
$ sudo vim /etc/rsyslog.conf
// 以下のコメントアウトを外す
cron.* /var/log/cron.log
$ sudo /etc/init.d/rsyslog restart
cronの起動、再起動、停止、ステータス確認
私の場合は最初からcronが起動している状態でしたが、状況に応じて実行してください。
// cronのステータス確認
$ sudo /etc/init.d/cron status
// active (running)になっていればOK
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-05-31 22:05:22 JST; 6 days ago
Docs: man:cron(8)
Main PID: 3315 (cron)
Tasks: 71 (limit: 4915)
Memory: 189.2M
...
// cronの起動
$ sudo /etc/init.d/cron start
// cronの再起動
$ sudo /etc/init.d/cron restart
// cronの停止
$ sudo /etc/init.d/cron stop
cronの設定
$ crontab -e
// 以下書式に従って設定を書く
分 時 日 月 曜日 '実行したいコマンドまたはスクリプト'
cronの設定時の注意点
cronはユーザーのシェルで起動しないため、ユーザーの環境変数は引き継がれません。そのため、必要に応じて以下を設定。
文字コードの設定
LANG=ja_JP.UTF-8
0 0 * * * /home/foo/foo1.sh
コマンド実行のためのPATHを通す
$ echo $PATH
/usr/local/sbin:/usr/local/bin:hogehoge...
$ crontab -e
LANG=ja_JP.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:hogehoge...
0 0 * * * /home/foo/foo1.sh
cronの実行結果をログに出力する
cron実行中のプログラムのログを出力させるための設定をします。
$ sudo touch /var/log/hoge.log
$ sudo chmod 777 /var/log/hoge.log
$ crontab -e
LANG=ja_JP.eucJP
PATH=/usr/local/sbin:/usr/local/bin:hogehoge...
0 0 * * * /home/foo/foo1.sh > /var/log/hoge.log 2>&1
// 上記は上書き。追記させたい場合は
0 0 * * * /home/foo/foo1.sh >> /var/log/hoge.log 2>&1
cronに複数コマンドを実行させる
cronに複数のコマンドを実行させるときはセミコロンで区切ります。
$ crontab -e
LANG=ja_JP.eucJP
PATH=/usr/local/sbin:/usr/local/bin:hogehoge...
0 0 * * * /home/foo/foo1.sh; /home/foo/foo2.sh > /var/log/hoge.log 2>&1