- PR -

crontabの日付指定でシェルが実行されない

投稿者投稿内容
ライト万
常連さん
会議室デビュー日: 2007/04/02
投稿数: 22
投稿日時: 2007-04-02 20:14
はじめまして。よろしくお願いいたします。

crontabの設定で、下記のように毎月1日に
パスワードの変更シェルを実行しています。

20 4 1 * * /usr/local/パスワード変更シェル

複数のサーバのうち、1台だけこのシェルが実行されません。
現状わかっていることは、日付の指定箇所を”1”→”*”に
変更すると正常にシェルは動作しています。(シェル自体に問題なし)
試しに1日以外の日付けも設定してみましたが、"*"以外の値を
設定していると動作しません。
この現象について、ご存知方がいましたら、ご教示お願いいたします。
せん
ぬし
会議室デビュー日: 2002/03/04
投稿数: 397
投稿日時: 2007-04-03 00:52
サーバ側の日付が正しくない、とか。
ライト万
常連さん
会議室デビュー日: 2007/04/02
投稿数: 22
投稿日時: 2007-04-03 12:17
ご回答ありがとうございます。

対象のサーバでdateコマンドを実行したところ、
問題なく本日の日時になっていました。
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2007-04-03 12:26
シェルスクリプト自体に問題がある可能性はまだ否定できんでしょう。
環境依存な部分があるという意味で。

そのシェルスクリプトをどのシェルで起動させてるのか分かりませんが、
(念のため、先頭行の#!/bin/bash みたいな指定部のところ)

・変更前
20 4 1 * * /usr/local/パスワード変更シェル
・変更後
20 4 1 * * /bin/bash -x /usr/local/パスワード変更シェル 2>&1 > /tmp/logfilename
みたいな感じで、実行時の標準出力、エラー出力、
変数展開状況の情報を取得してみては?

もちろん、シェルスクリプト内独自でログ出力機能を実装しても
差し支えありません。

なんにしろ、実行された・されないだけの情報じゃ、
追いかけるのにも限界ありますから。
_________________
Mattun
Microsoft MVP for Directory Services
(Oct 2006-Sep 2007)
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-04-03 20:12
こんばんは。
Linux の何かのディストリビューションでしょうか。
cron のログ ( 実行報告等 ) が syslog に出ないでしょうか?

crond がジョブを起動できているかどうか、を確認するために、長時間 sleep するジョブを crontab に仕込んでおいて、目的の時刻あたりで ps -ef 等の結果をモニタする、という手もありますね。
ライト万
常連さん
会議室デビュー日: 2007/04/02
投稿数: 22
投稿日時: 2007-04-03 21:00
今少し時間ができので、
tail -f /var/log/cronをみていました。

下記の日付なしのときは、cronのログでシェルも動作しています。
24 20 * * * /usr/local/パスワード変更シェル

>tail -f /var/log/cron
Apr 3 20:23:01 ホスト名 crond[4844]: (root) RELOAD (cron/root)
Apr 3 20:24:01 ホスト名 crond[11184]: (root) CMD (/usr/local/パスワード変更シェル)

下記のように日付を入れると、RELOADの後、
パスワード変更シェルの動作確認はできませんでした。
28 20 3 * * /usr/local/パスワード変更シェル

>tail -f /var/log/cron
Apr 3 20:27:01 ホスト名 crond[4844]: (root) RELOAD (cron/root)

Mattunさんのご意見を試しましたが、日付をいれると
エラー出力も表示されませんでした。

末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2007-04-04 00:33
こんばんは

私も同様の現象に見舞われました。

04 01 00:00に起動させるテストをするために
20 20 31 3 * コマンド

などとして1分後の時刻を入力してテストしていたのですがなぜか実行できず
ログもRELOADのみでCMD行が出てきませんでした。

いろいろ試してみたのですが、原因がわからず atコマンドで急場をしのぎましたが

テスト中に色々やっていた残骸が下のように残っていて04/01 20:20になぜか実行されてました。

20 20 1 4 * コマンド

日付をまたがないといけないのかもしれないと仮説を立ててみるテスト


$uname -a
Linux **** 2.6.9-42.0.2.ELsmp #1 SMP Wed Aug 23 00:17:26 CDT 2006 i686 i686 i386 GNU/Linux
SHR
ベテラン
会議室デビュー日: 2006/06/15
投稿数: 99
投稿日時: 2007-04-04 09:29
気になったので、手元の環境で試したら再現しました。
OS:Red Hat Enterprise Linux AS release 3 (Taroon Update 1)

crontab -eにて下記二行を追加
> 15 9 4 * * /root/date.sh > /root/cron.log 2>&1
> 17 9 * * * /root/date.sh > /root/cron.log 2>&1

/root/date.shは以下の内容
> #!/bin/bash
> date >> /root/date.log

結果、date.logには
> Wed Apr 4 09:17:00 JST 2007
のみとなりました。

/var/log/cronにも、9:17の実行ログはあっても、9:15分の記載はありません。
ちなみに/root/cron.logは空です。

ちょっといろいろと試してみます。

**試したので追記**
crontabに6行
> 30 9 4 4 * /root/date.sh > /root/cron.log 2>&1
> 31 9 4 * * /root/date.sh > /root/cron.log 2>&1
> 32 9 * 4 * /root/date.sh > /root/cron.log 2>&1
> 33 9 * * * /root/date.sh > /root/cron.log 2>&1
> 34 9 4 4 3 /root/date.sh > /root/cron.log 2>&1
> 35 9 4 * 3 /root/date.sh > /root/cron.log 2>&1
あれ?今度は全部実施された……。
31だけ実施されないのを期待したのですが…。

[ メッセージ編集済み 編集者: SHR 編集日時 2007-04-04 09:42 ]

スキルアップ/キャリアアップ(JOB@IT)