2021 年度 OSS リテラシー 3 : CRON
cron を用いた定期的なコマンド実行
定期的にコマンドを実行する仕組みとして cron がある. センサーデバイス (ラズパイ) でファイル出力したデータをサーバに定期的に転送したり, バック アップを定期的に行う場合など, cron を使う機会は多い.
各ユーザが定期的にコマンドを実行するコマンド群は crontab に登録する. 以下では 1 分毎に時刻をネットワークの設定を出力する. TIPS であるが, cron では /sbin に PATH が通っていないので, PATH=/usr/bin:/bin:/usr/sbin:/sbin を設定しておくと良い. また, cron の出力はメールで送信される. 送信先のメールアドレスを指定する場合は, MAILTO に与えると良い. 今はメールを送らないので MAILTO には "" を与える.
なお, crontab を始めて実行した時にはエディターの選択画面が現れる. vim.tiny or vim.basic を選択することを勧める (以下の例では 3 番を選択しているが, 環境によって番号は異なる).
$ crontab -e no crontab for hogehoge - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.basic 3. /usr/bin/vim.tiny 4. /usr/bin/emacs Choose 1-3 [1]: 3 (3 を選択) # m h dom mon dow command PATH=/usr/bin:/bin:/usr/sbin:/sbin MAILTO="" (メールは送らない設定) */1 * * * * date >> date.txt
cron が実行された時刻を見計らって, 自分のホームディレクトリに date.txt というファイルができているはずである. そこに cron が実行された時刻が書き込まれていることを確認すること.
$ cat ~/date.txt
確認が終わったら crontab の記述をコメントアウトする.
$ crontab -e # m h dom mon dow command PATH=/usr/bin:/bin:/usr/sbin:/sbin MAILTO="" # */1 * * * * date >> date.txt (コメントアウト)
課題
- crontab について以下の問いに答えよ
crontab に以下の行が書かれていた. hostname コマンドが実行される時刻を答えよ
20 */6 * * * hostname
- 毎日 1:00, 3:00, 5:00 に hostname コマンドを実行したい. crontab -e でどのような行を追加すれば良いか答えよ.
- 毎週火曜日 5:10 に hostname コマンドを実行したい. crontab -e でどのような行を追加すれば良いか答えよ.
- 毎月 1 日に, 2 時間おき (0:05, 2:05, 4:05, 6:05, ....) hostname コマンドを実行したい. crontab -e でどのような行を追加すれば良いか答えよ.