メンチカツには醤油でしょ!!

AWS/Java/Node.js/Spreadsheets/Docker/Jenkins/コミュニティ・勉強会レポを主とした技術系ブログ

Ubuntu 14.04 LTSでcron設定

なりゆき

Ubuntuを入れたマシンにcronで定時実行したい処理があったので
それを設定した時のメモです。

cronサービスが生きてるか確認

$ sudo service cron status

実行シェルを配置

$ cd /etc/cron.d/
$ sudo cp ~/temp/***.sh ./
$ chmod 644 ***.sh

sudoでやらんとコピーできなかったり権限設定できなかったり。
所有者はrootになってる必要がありそうです。

crontabを設定

$ crontab -e
no crontab for obara - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.tiny
Choose 1-3 [2]: 2

初回はエディタ選択のプロンプトが出ますが、nanoを選択すると一番簡単なの。

f:id:ryoichi0102:20160302204437j:plain

で、とりあえずは毎分実行されるように* *  * * *で設定してみる。
(とりあえず実行確認したいので)

エラー発生時にはメールが飛ぶのですが、その設定をしたくない人は
MAILTO=""
を書いておきます。(本当はメール設定した方が良い)

実行ログ確認

/var/log/syslogの最後を確認します。

Mar 2 18:48:01 Ubuntu118 CRON[2736]: (obara) CMD (/bin/bash /etc/cron.d/***.sh)
Mar 2 18:48:01 Ubuntu118 CRON[2735]: (CRON) info (No MTA installed, discarding output)

No MTA installed, discarding output はpostfixのメール送信ができない場合に出ます。

postfixを入れる…と思いきや

info (No MTA installed, discarding output)
で調べるとpostfixがないので入れましょう (apt-get install postfix) とか出るんですが
そもそもcronの実行に失敗してメール送信しようとしているようです。

(メール設定しようとしたらしたでハマったのと、
今回はcron中の失敗通知が比較的重要ではないので、メール設定はしませんでした)

そもそもなぜ失敗しているのか

これはsyslogには書かれないのですが
curlで外のAPI叩いてファイルに落としてる所があるのですが
そもそもスクリプトはカレントディレクトリにファイルを作るようになってたり。

スクリプトの先頭で

cd ~/temp

などとするようにしました。

 

↓ こちらが参考になりました。

dqn.sakusakutto.jp