このブログで初めてcrontabのことを書く〜
crontabは定期的になんらかのコマンドを走らせるときに便利、ということは度々聞いてたけど
今回始めて使うことになってしまった・・・・
今までどうしてたかというと
sleep 3600; echo "hoge"
みたいな感じで手作業で待機させて走らせていた・・・アナログ人間的発想って感じだ・・・ 別の言い方をすると発想がおじいちゃん
自分が走らせたかったのはただのシェルスクリプト
自分のシェルで動くことは確認済
crontabを走らせる設定は以下のコマンドで書く
crontab -e
EDITORという変数を設定していないと、viとかで編集することになるので設定しておくsetenv EDITOR "emacs -nw"
まずは動作テスト次のようにcrontabe -eで設定するこれで、1分ごとにhoge.txtが更新されるはず
ls -ltなどでhoge.txtの最終更新日が確認できる
現在の設定は
crontabe -l
で表示できる左から
[分, 0~59] [時, 0~23] [日, 1~31] [月, 1~12] [曜日, 0~7, 0=7=日曜, またはsun~satでも指定できる] [コマンド]
に対応するコメントアウトをしたかったら、#でそのジョブを止めれる
この次に、自分のシェルスクリプトを使って動作テストをする
が、うまく動いてくれない
何が原因で動いてくれないのかはエラー出力や標準出力がないからわかりにくい
そこで、
* * * * * echo “hoge" >>~/log1.txt 2>> ~/log2.txt
のようにして、標準出力と標準エラーをファイルに書き出すこれでエラーメッセージが読めるようになる
このあとでトラブったのがPATHやLD_LIBRARY_PATHなどの環境変数の設定
crontabを実行するときは、PATHなどがすべてリセットされてほとんど空の状態になる
シェルスクリプトを動かすのに必要なのはPATHやLD_LIBRARY_PATHくらいなのでそれをセットする
セットする方法は以下のページに何種類も提案されてる
自分はcrontabにそのまま直書きする方法にした
50 10 * * * PATH=/usr/local/bin:/usr/bin:/bin:$HOME/bin:. LD_LIBRARY_PATH=/usr/local/lib/:$HOME/local/lib/ hoge.sh >>~/log1.txt 2>> ~/log2.txt
これで動いた毎時15分じゃなくて、本当に15分ごとに何かを実行したいときは
*/15 * * * * PATH=/usr/local/bin:/usr/bin:/bin:$HOME/bin:. LD_LIBRARY_PATH=/usr/local/lib/:$HOME/local/lib/ hoge.sh >>~/log1.txt 2>> ~/log2.txt
■ 参考 : 時間をずらしてcronを実行する1-56/15とすれば毎時1分, 16分, 31分, ・・・とかもできるらしい
ランキング参加中です
↓クリックしていただけると嬉しいです〜