- PR -

cron起動の際にatコマンドが使用できないです。

投稿者投稿内容
souichi
会議室デビュー日: 2005/03/15
投稿数: 4
投稿日時: 2005-03-15 13:54
いつも拝見させていただいております。

現在、わからないことが書き込みをさせて頂きました。

cronにてシェルを起動させているのですが、シェルの記述の中に、あるファイルがなかったら、5分後に再度シェルを実行するようにatコマンドを使用して記述しているのですが、cronからの起動だとうまくjobが設定されません。
手動でシェルを起動した際には、jobの設定が行われます。

すいませんが、どなたかわかる方ご教授頂けないでしょうか?
どうかよろしくお願い致します。

OS:RedHat 9
使用しているシェル:bash

実際のプログラム*********************

if [ -e "ファイル" ]
then
#ファイルがあった時の処理
else
#ファイルがない場合の処理
echo "$SHELLFILE" | at now + 5min
exit
fi

*************************************
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2005-03-15 14:08
cron 無しで、

fm.sh
コード:
#!/bin/bash

if [ -e "ファイル" ]
then
#ファイルがあった時の処理
else
#ファイルがない場合の処理
wdog.sh
exit
fi



wdog.sh
コード:
#!/bin/sh

at now + 5min < fm.sh



最初に fm.sh を起動でどう?

[ メッセージ編集済み 編集者: コブラ 編集日時 2005-03-15 14:32 ]
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2005-03-15 14:12
まずはcronのログを。
実行ユーザ宛てに実行ログが届いているはずです。

少なくともスクリプトが実行されているようであれば、
スクリプトの冒頭の
/bin/bash
の部分を
/bin/bash -x
に変更することで、より詳細なスクリプトの実行状況が把握できます。
souichi
会議室デビュー日: 2005/03/15
投稿数: 4
投稿日時: 2005-03-15 14:31
ご返答ありがとうございます。

現在、コブラ様より頂いたプログラムを実行した結果、やはりatコマンドのjobは設定されていませんでした。
頂いたプログラムで気になったのですがwdog.shの2行目に、fm.shが記述されているのですが、これはfm.shが実行されてしまのではないでしょうか?

現在cronからのログをファイル出力にしているのですが、何も出力がされていません。
mattun様から教えて頂いた-xのオプションを記述をして再度実行を行いたいと思います。

以上です。すいませんが、よろしくお願い致します。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2005-03-15 14:33
失礼しました。
余計な fm.sh が書いてありました。

取ってみて下さい。
souichi
会議室デビュー日: 2005/03/15
投稿数: 4
投稿日時: 2005-03-15 15:59
ご返答が遅くなり申し訳ございません。

コブラ様
>失礼しました。
>余計な fm.sh が書いてありました。
上記の件了解致しました

-xのオプションを記述をしてcronにて実行をおこなったのですが、やはりcronで出力されるファイルには何も記述されていませんでした。

実際に-xのオプションにて、シェルを手動で実行した際には、詳細がコンソールに出力はされています。

なにか、ほかにいい方法はありますでしょうか、すいませんが、宜しくお願い致します。
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2005-03-15 16:10
引用:

-xのオプションを記述をしてcronにて実行をおこなったのですが、やはりcronで出力されるファイルには何も記述されていませんでした。


*/3 * * * * /hoge/foo.sh > /dev/null
なんて記述してて、実行結果出力を闇に葬ってたりしませんよね?
# 何も考えず理由も書かずにそんな記述例を提示しているWebサイトが結構あるのも事実ですが。
その辺も踏まえて、
・cronにどうやって登録したのか?
・cronにどのような記述を追加したのか?
を明らかにしてください。

実際にcronにどんな記述をしているのか分かりませんが、
*/3 * * * * /hoge/foo.sh > /hoge/foo.log 2>&1
などとして実行結果を出力してみては?


ところで、cronで意図した通りに動かない際の、一般的なデバッグ方法って
どこかに無いんですかね?以前それが見つからずにこうやって自己流でデバッグしてきたんだけど。
souichi
会議室デビュー日: 2005/03/15
投稿数: 4
投稿日時: 2005-03-15 16:32
申し訳ございませんでした、確かに、cronとatコマンドのことでご質問をしている
ので、cronの記述もしておくべきでした。大変申し訳ございません。

crontab -lの実行時の出力内容
***********************************************************************
SHELL=/bin/sh
PATH=$PATH:/sbin:/bin:/usr/sbin:"/Oracleのパス":"/実行のプログラムのパス"
MAILTO=実行ユーザー名

22 16 * * * test.sh > /tmp/cron.log 2>&1
***********************************************************************
すいません、標準出力しかログに書き出していませんでした。
デバック内容はエラー出力で取れるんですね。
atコマンドを実装しているシェルを実行した際に
at: command not found
と出力されていました。

cronからはatコマンドが見えていないということのでいいのでしょうか?
確かに、which atをすると、/usr/bin/atと出力されるので、パスの追加を
して実行を行ってみました。

ちゃんとJOBが設定されました。
本当に、ありがとうございます、助かりました。

ありがとうございました。

Mattun様
確かに、cronのデバック方法があると便利ですね、今回のことで非常に感じました。
またcronのデバックの出力方法など、勉強になりました。ありがとうございます。

[ メッセージ編集済み 編集者: souichi 編集日時 2005-03-15 16:36 ]

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