ログ出力設定
Ubuntu16.04のcronのログはデフォルトでは出力されない。そこで、logの設定ファイル (/etc/rsyslog.d/50-default.conf)でログの出力を有効にする。
# # First some standard log files. Log by facility. # auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog cron.* /var/log/cron.log #daemon.* -/var/log/daemon.log kern.* -/var/log/kern.log #lpr.* -/var/log/lpr.log mail.* -/var/log/mail.log #user.* -/var/log/user.log
リスト1./etc/rsyslog.d/50-default.conf
リスト1に設定ファイルの一部を示す。デフォルトではcron.*の行がコメントアウトされている(先頭に#が付いている)。この#を消して、設定ファイルを保存し、cronを再起動する。
$ sudo service cron restart
リスト2.cronの再起動
これでcronのログが/var/log/cron.logに出力される。
root@semi2017ehr:/var/log# tail -f cron.log Oct 12 18:25:01 semi2017ehr CRON[29158]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) Oct 12 18:27:13 semi2017ehr crontab[29195]: (semi2017kumw) BEGIN EDIT (semi2017kumw) Oct 12 18:27:32 semi2017ehr crontab[29195]: (semi2017kumw) REPLACE (semi2017kumw) Oct 12 18:27:32 semi2017ehr crontab[29195]: (semi2017kumw) END EDIT (semi2017kumw) Oct 12 18:27:45 semi2017ehr cron[29217]: (CRON) INFO (pidfile fd = 3) Oct 12 18:27:45 semi2017ehr cron[29217]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
リスト3./var/log/cron.log
また、cronの状態はstatusコマンドで確認できる。
semi2017kumw@semi2017ehr:~$ sudo service cron status ● cron.service - Regular background program processing daemon Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled) Active: active (running) since 土 2019-10-12 19:01:17 JST; 7min ago Docs: man:cron(8) Main PID: 29661 (cron) Tasks: 1 Memory: 280.0K CPU: 489ms CGroup: /system.slice/cron.service mq29661 /usr/sbin/cron -f 10月 12 19:01:17 semi2017ehr systemd[1]: Started Regular background program processing daemon. 10月 12 19:01:17 semi2017ehr cron[29661]: (CRON) INFO (pidfile fd = 3) 10月 12 19:01:17 semi2017ehr cron[29661]: (CRON) INFO (Skipping @reboot jobs -- not system startup) 10月 12 19:05:01 semi2017ehr CRON[29675]: pam_unix(cron:session): session opened for user root by (uid=0) 10月 12 19:05:01 semi2017ehr CRON[29676]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1) 10月 12 19:05:19 semi2017ehr CRON[29585]: (CRON) info (No MTA installed, discarding output)
リスト4.cronのstatus
プロセススケジューリング(crontab)
まず、プロセスを起動するシェルスクリプト(~/pill-reminder/pill-reminder.sh)を作成する(実行権限を与える)。
#!/bin/sh /usr/local/bin/node /home/semi2017kumw/pill-reminder/pill-reminder.js >> /home/semi2017kumw/pill-reminder/pill-reminder.log
リスト5.プロセスを起動するシェルスクリプト
ここで注意が必要なのは、シェルスクリプトはUTF-8(BOMなし)でつくることと改行コードは\nとすること(\r\nにしてはならない)である。シェルスクリプトに\rが含まれていないかどうかは次のコマンドで確認できる。
semi2017kumw@semi2017ehr:~$ od -c ~/pill-reminder/pill-reminder.sh 0000000 357 273 277 # ! / b i n / s h \n / u s 0000020 r / l o c a l / b i n / n o d e 0000040 / h o m e / s e m i 2 0 1 7 k 0000060 u m w / p i l l - r e m i n d e 0000100 r / p i l l - r e m i n d e r . 0000120 j s > > / h o m e / s e m 0000140 i 2 0 1 7 k u m w / p i l l - r 0000160 e m i n d e r / p i l l - r e m 0000200 i n d e r . l o g \n 0000212
リスト6.シェルスクリプトに\rが含まれていないか確認する
もし\rが入っていたら、次のコマンドで\rを除去する。
$ sed -i 's/\r//' ~/pill-reminder/pill-reminder.sh
リスト7.\rの除去
プロセスのスケジューリングはcrontabコマンドで行う。
$ crontab -e
リスト8.crontabコマンド
# m h dom mon dow command 0 1 * * * /home/semi2017kumw/pill-reminder/pill-reminder.sh
リスト9.プロセスのスケジュール
これは、毎日午前1時にシェルスクリプトを実行する設定である。設定を終えたらcronを再起動する(リスト2)。
0 件のコメント:
コメントを投稿