QA@IT

ubuntu 14.04 Linux cronの実施方法について

3435 PV

Cronの実施について

仮想環境:Virtual Box 5.0
OS: ubuntu 14.4 Linux 32bit

にて、cronを動作させて、一定時間ごとにScriptを実施したいと考えております。

調べた範囲では、

  1. #crontab -e

Cronファイルを編集

EXAMPLE CRON FILE
# 0 時 5分に /home/tmp/outに結果を出力するdaily.jobスクリプトを実施
# run five minutes after midnight, every day
5 0 * * * /home/user/batch/daily.job >> /home/tmp/out 2>&1

なのですが、0:5分になると、syslogには
Dec 4 00:05:01 user-VirtualBox CRON[3032]:(user) CMD(/home/user/batch/execute.sh)
Dec 4 00:05:01 user-VirtualBox postfix/sendmail[3036]:fatal open /etc/postfix/main.cf: No Such File or directory
Dec 4 00:05:01 user-VirtualBox CRON[3031]:(user) MAIL(mailed 1 byte of output; but got status 0x004b, #012)

という表示がされて cronが実行されているように見受けられるのに、結果ファイルが
作成されません。

もちろん、/home/user/batch/execute.shを直接 CMDで実行すると
ログファイルは出力されます。

トラブルシュートとして

ネットを検索したところ、
https://users.miraclelinux.com/technet/document/linux/training/2_3_5.html
ジョブスケジューラー
cronを用いてバックアップのスケジューリング

cronデーモンの起動/停止
#/sbin/service crond start
#/sbin/service crond stop

を実施しようとしましたが、 ファイルがありませんと出力されます。

http://mylinux.g.hatena.ne.jp/teraco/20081208/1228696758
で、メールの設定も無効にしてあります。

cronデーモンの起動と停止
cronを使用するには、cronの実体であるデーモンcrond を起動する必要があります。
crond の起動/停止スクリプトは/etc/rc.d/init.d/crond となっています。
起動スクリプトのオプションでは、起動(start)、停止(stop)、再起動(restart)、
現在の状況を確認(status)を指定できます。

とありますが、そもそもrc.dフォルダがありません。

/etc/配下は
rc.local
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
はあるのですが。。。

ubuntuの掲示板にて
http://manpages.ubuntu.com/manpages/hardy/man8/update-rc.d.8.html
INSTALLING INIT SCRIPT LINKS
When run with either the defaults, multiuser, start, or stop options,
update-rc.d makes links /etc/rcrunlevel.d/[SK]NNname that point to the
script /etc/init.d/name.

   のような記載をみたのですが、ランレベルに応じて設定する必要があるのですかね。

ネットには
http://d.hatena.ne.jp/ozuma/20120711/1342014448
crontab -eは利用せず、cronの各cron.daily / cron.hourly / cron.monthly
の配下に、使用したいスクリプトを配置して、スクリプトを動かした方が良い
と言う記載もネットにありました。

ちなみにスクリプトですが、

chmod u+x /home/user/batch/healthcheck.sh
/home/user/batch/healthcheck.sh > log.txt

で、healthcheck.sh のヘルスチェックの結果を呼び出して log.txtとして出力するものです。

どなかた、ubuntuにおける基本的なcronの動かし方における注意点を御指摘頂けますと幸いです。

  • (1)batch/daily.jobとbatch/execute.shの関係は?(2)/home/tmpにuserのパーミッションはありますか?(3)batch/daily.jobとbatch/healthcheck.shの関係は?(4)batch/healthcheck.sh > log.txtを実行するときのカレントディレクトリはどこですか? -

回答

/home/user/batch/healthcheck.sh > log.txt

これだとlog.txtをカレントディレクトリに出力しています。crontab -eでジョブを作って実行したら、デフォルトではカレントディレクトリは$HOMEになるので、別のディレクトリにcdしていなければ、$HOMEにlog.txtを出力していると思います。

あと僕がコメントで

(2)/home/tmpにuserのパーミッションはありますか?

ときいた意図なんですが、/homeの下のディレクトリ(/home/userなど)はls -lで見ると通常drwx------になっていて、オーナー以外は読み書きできないようになっているはずです。/home/userの下ならいいのですが、/home/tmpの下だとどうなんだろう?と思ったので。

編集 履歴 (0)

blundr3様

御指摘のとおり、スクリプト実施時のカレントディレクトリを確認しました。
http://qiita.com/doranekohc/items/c9bca52eed96916be9b6

/home/userディレクトリ
配下にlog.txtが作成されており、無事cronが動作されており、結果が出力されていることになります。

cronデーモンの起動と停止等はまだまだ、確認しなくてはなりませんが。

先ずは大目的のcronの動作の確認を行う事ができました。
誠にありがとうございました。

編集 履歴 (0)

blundr3様

>(1)batch/daily.jobとbatch/execute.shの関係は?
大変失礼いたしました。

#0 時 5分に /home/tmp/outに結果を出力するdaily.job⇒execute.shスクリプトを実施
#run five minutes after midnight, every day
5 0 * * * /home/user/batch/daily.job >> /home/tmp/out 2>&1

↓ 実際に記載していたスクリプトは以下でした。
crontab -e ⇒ /etc/crontab
5 0 * * * /home/user/batch/execute.sh

の記載間違いです。

>(2)/home/tmpにuserのパーミッションはありますか?

chmod u+x /home/user/batch/healthcheck.sh
/home/user/batch/healthcheck.sh > log.txt

を、実施しています。

>(3)batch/daily.jobとbatch/healthcheck.shの関係は?
ご指摘のとおり、記載ミスでした申し訳ありません。
/execute.shより、batch/healthcheck.shを呼び出しております。

>(4)batch/healthcheck.sh > log.txtを実行するときのカレントディレクトリはどこですか? -
こちら意識しておりませんでした。カレントディレクトリが、batch/下でいつも、execute.shを
動作させていた為、スクリプト実施時のカレントディレクトリも/home/user/batchと思っておりましたが
確認する必要がありそうです

御指摘いただきありがとうございます。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。