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 でどのような行を追加すれば良いか答えよ.