- PR -

cron設定について

1
投稿者投稿内容
uparrow
会議室デビュー日: 2004/08/31
投稿数: 18
投稿日時: 2005-01-27 21:57
現在YYYYMMDDの日付文字列をパラメータとするDBバックアップスクリプトを使用し、必要なときに手動でバックアップしておりました。今回、cronにて自動で起動したいと思い次のような設定を行ったのですが、date の箇所の記述でうまく動作しません。

0 5 1 * * /home/db_backup.sh `/bin/date "+%Y%m%d"` > /dev/null 2>&1

どこが誤りなのかわからない状態です。どなたかご教授いただけますでしょうか。
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2005-01-27 22:08
引用:

0 5 1 * * /home/db_backup.sh `/bin/date "+%Y%m%d"` > /dev/null 2>&1

どこが誤りなのかわからない状態です。


という状態なら、まずなにより
/dev/null
にリダイレクトせずに、ログファイルにリダイレクトしてその内容を
確認すべきだと思うんですが、やったんでしょうか?

動作確認取れてない状態でも魔法の言葉のように "> /dev/null"を書く人は
結構見かけるわけだけど・・・


また、最終的に動かしたいのは
コード:
/home/db_backup.sh `/bin/date "+%Y%m%d"` 


なのは分かるんですが、
コード:
#!/bin/bash
/home/db_backup.sh `/bin/date "+%Y%m%d"`


というシェルスクリプトをcronで動かして結果を見てみたり、
さらにはその先頭行を
コード:
#!/bin/bash -v



コード:
#!/bin/bash -x


に変えてみることで、bashコマンドラインのプレース展開の様子などの
確認も出来ます。


uparrow
会議室デビュー日: 2004/08/31
投稿数: 18
投稿日時: 2005-01-28 06:14
もちろん、スクリプトは妥当なもので、そのかなでログ出力等も行っておりコマンドラインで
/home/db_backup.sh `/bin/date "+%Y%m%d"`
をキックすれば期待通りの結果が得られます。

また、ご指摘のとおり
#!/bin/bash
/home/db_backup.sh `/bin/date "+%Y%m%d"`
なるシェルをcronで動かした場合も期待する結果が得られます。

シェルに渡すパラメータを生成している`/bin/date "+%Y%m%d"`の代わりに
"20050125"を設定した場合も正常な動作をします。

`/bin/date "+%Y%m%d"`が原因かとは思うのですが、このようなパラメータの設定は
cronでは行えないものなのでしょうか?

Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2005-01-28 06:48
で、冒頭のcronの記述から > /dev/null 部分を外した場合は
意図した通りの結果になるんですか?ならないんですか?
そして、意図してない日付文字列が渡された際に
backup.shはどのようなログを残すんですか?
# backup.shではその辺のエラー処理を行っているんでしょうか?

また、
echo `/bin/date "+%Y%m%d"` > /tmp/temp.$$
などとしてみた際の結果は?

cronと言っても、登録したコマンドラインを登録したユーザの空間で
特定の時間に実行してるだけに過ぎないんだから、
・どのようなコマンドラインが渡されたか
・コマンドラインをどのように解釈したのか、が問題です。
クォーティングを含んだコマンドラインだと、渡された時点でクォートが外れてて
意図した通りにならなかった、っていうのは十分ありえます。
そういう意味では、
また、ご指摘のとおり
引用:

#!/bin/bash
/home/db_backup.sh `/bin/date "+%Y%m%d"`
なるシェルをcronで動かした場合も期待する結果が得られます。


という動きにしてしまうのがもっとも無難でしょう。

[ メッセージ編集済み 編集者: Mattun 編集日時 2005-01-28 07:11 ]
カズ
会議室デビュー日: 2003/05/28
投稿数: 7
投稿日時: 2005-01-28 12:45
括弧でくくってみてはいかがでしょうか。以前、crontab において、上手く動作しないコマンドがあった際に、括弧でくくったら動作した記憶があります。

0 5 1 * * ( /home/db_backup.sh `/bin/date "+%Y%m%d"` ) > /dev/null 2>&1

参考まで。
uparrow
会議室デビュー日: 2004/08/31
投稿数: 18
投稿日時: 2005-02-13 15:28
アドバイスありがとうございます。
残念ながら、括弧でくくってみましたが実行されませんでした。

結局、パラメータなしのシェルをcronでキックし、そのシェルで
日付文字列をパラメータとしてdb_backup.sh することに妥協しました。

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

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