さば

ここから何かを伝えようとは思っていない

linux(linuxBean)でのタスクスケジューラ(cron)を使ってみる

linuxWindowsのタスクスケジューラみたいなことをやりたくて調べていると,cronを使う方法が有名だと知る.ということで少し調べてみた.

同じlinuxでもOSにより設定が異なるようだが,今使っているlinuxBean(ubuntu系)について軽くまとめてみる.

[cronの設定]
端末で次のコマンドを実行.

$ crontab -e

エディタが表示されるので,最下行にタスクの設定を追加し保存.

# m h dom mon dow user command
分 時 日 月 曜日 [ユーザ名] [コマンド]

例として毎時20分のタイミングでユーザb35612ykがtest.shを実行したい場合は

# m h dom mon dow user command
20 * * * * b35612yk sh /home/b35612yk/test.sh

設定が正しく反映されているかを確認するためには,
次のコマンドを実行.

$ crontab -l

うまく反映されていない場合は,
同じ内容を書き込んだテキストファイル(例えばcron.txt)を作成し,

$ crontab cron.txt

で読み込ませることもできる.

上記設定をしてもうまくジョブが起動しない場合.
cronはおそらくOSを起動したタイミングで起動しているはずだが,下記のコマンドでcrontab状態を確認できる.

[サービスの確認]

$ /etc/init.d/cron status

[起動]

$ /etc/init.d/cron start

[再起動]

$ /etc/init.d/cron restart

crontabが正しく動いているかを確認するには,下記に保存されている実行ログを確認する.

$ vi /var/log/syslog

その中に実行ログがあれば,cronは正常に動いていることになる.

今回の動作確認ではJavaで書いたバッチプログラムをシェルを使って動かそうとしていたのだけど,cronの実行ログがあるにも関わらずシェルが動いた形跡が見られなかった.この手の情報を公開しているサイトには大抵書いてあることだが,具体的に確認したこととしては,
1.シェルファイルの実行権限が正しく設定されているかを確認
2.crontab の設定に実行ユーザ名が指定されているか確認
3.errorログをはかせる.具体的には,

# m h dom mon dow user command
20 * * * * b35612yk sh /home/b35612yk/test.sh >>/tmp/analog.log 2>>/tmp/analog-err.log

などとcrontabに登録.エラーがあればログファイルに内容が出力される.

#今回の場合,エラーの原因はJavaコマンドの参照をうまく取れていなかったので,/usr/bin/javaのようにフルパスで指定してあげたらOKだった.

以上.