cronジョブを追加する4つの方法

目次

モチベーション

現在作成しているCLIアプリケーションについてcronジョブを設定する必要があった。 cronジョブの設定方法としては crontab -e を用いる方法を知っていたが、プログラム内から ジョブを編集するにはエディタを開かれては困るということでその他の方法を調べたのでついでにここにまとめる。

cronジョブを追加する4つの方法

4つの方法

先に調べた方法をそれぞれ記載する

  • crontab -e
  • crontab [file]
  • /etc/cron.d/
  • /var/spool/cron/crontabs/$USER/

最後の方法は動作未検証のため?をつけている。 それぞれの特徴を以下に述べていく。

crontab -e によるエディタを用いた編集

言わずと知れたエディタで編集する方法。

$ crontab -u $USER -e

とすることで $USER 権限のcronジョブを作成することができる。 有名なデメリットに

$ crontab -r

を誤って起動してしまうというものがある。 こちらのコマンドはcronジョブを全消去するというもので非常に危険であるのに対し、 確認もなく、よく使うオプションの e の隣にある r であることから事故が立たないとのこと。 そのため、 /etc/crontab を直接編集する派閥もいるらしい。 上記の直接編集もこちらの項目に含めて考える。

pros
  • エディタでそのまま手軽に編集できる
  • 権限を決められる
cons
  • プログラムから使用しづらい
  • 死の危険と隣り合わせ

crontab [file] によるファイルの読み込み

crontabコマンドは引数としてファイルを渡すとそのファイルを$USERのcronジョブ置き場に配置してくれる。 crontab -e と同様にユーザを指定することも可能。

$ crontab -u $USER [file]
pros
  • プログラムで使いやすい
  • 権限を決められる
cons
  • 一度情報をファイルに起こさないといけない
  • 削除や編集の仕方がわからない? <- 要検証

/etc/crond.d/

指定のディレクトリにジョブを記載したファイルを配置する。 cronは /etc/cron.d/ を含め、いくつかのディレクトリ配下に配置されたジョブファイルを自動で読み取りに行く。 ファイルを配置しておくだけなのでかなり自由度高くジョブを操作できる。 問題点は権限がrootでなくてはいけないところ。

pros
  • ファイルを配置するだけなので自由度高い
cons
  • 権限がrootのみ
  • file modeにも気を使う必要がある (確か644のみ)

/var/spool/cron/crontabs/$USER にファイルを追加

上記の /etc/cron.d/ 配下にファイルを追加する方法だと権限がrootになってしまうということで調べた方法。 /var/spool/cron/crontabs/$USERcrontab -u $USER としたときに開かれるcronジョブファイルが配置されている場所なので 権限は $USER になるはずである。 ただし落とし穴があり、 /var/spool/cron/crontabs/ には $USER に対して書き込み権限どころか読み取り権限すら 与えられておらず現実的に目的の位置にファイルを配置するためにはroot権限が必要なることである。 調べている途中で使うことはないなと思ったので本当に動くかどうかも怪しいのは許していただきた。

pros
  • ファイルを配置するだけなので自由度高い
  • $USER権限
cons
  • 配置するためにroot権限が必要
  • file modeに気を使う必要がある

まとめ

以上、まとめてみた感想だが、cronは意外と扱いづらいことがわかった。