- PR -

crontabで実行できません

1
投稿者投稿内容
ツッキー
会議室デビュー日: 2005/08/22
投稿数: 5
投稿日時: 2005-09-07 14:30
bash > /root/crontab/csv.bat > /root/crontab/log/`date +'%Y%m%d'`.log
のコマンドは正常に処理できますが、これをcrontab -e で
49 13 * * * /root/crontab/csv.bat > /root/crontab/log/`date +'%Y%m%d'`.log
を記述すると、うまく実行できません。
問題の記述は`date +'%Y%m%d'`にあることは判りましたが、どのようにすればいいのか
解決方法がみつかりません。どなたか教えていただけませんでしょうか?
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-09-07 15:37
こんにちは。
man 5 crontab をどうぞ。

引用:
コマンド中にパーセント記号 (%) がバックスラッシュ (\) によってエスケープされずに置かれていると、改行文字に置き換えられ、…
(以下略)



ということで、% は \% というようにエスケープしましょう。
ツッキー
会議室デビュー日: 2005/08/22
投稿数: 5
投稿日時: 2005-09-07 15:50
angelさんありがとうございました。
% -> \% に変更すると動作しました。ただ、file名が
\2005\09\07.log
になりますね。

このファイル名は、これ以上どうにもならないのかな・・・?
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2005-09-07 16:20
…本当ですね。

 % → 改行
 \% → \%

という変換になるので、素の % はひょっとして使えない…??
それが仕様だとすると、非常に間抜けな気がします。

一応、今回の例であれば、

 `date +'%Y%m%d'`
 → `date +\%Y\%m\%d`

というようにシングルクォートを省けば、コマンド実行時にシェルが \% → % の変換を行って、上手くはいくようですが。
※勿論、複雑なコマンドは直接 crontab に書かず、シェルスクリプトに収めてしまっても良いわけですが。

以上、ご参考まで。
がるがる
ぬし
会議室デビュー日: 2002/04/12
投稿数: 873
投稿日時: 2005-09-07 17:01
がると申します。
んっと。私の場合、まず
コード:
#!/bin/bash

DATEFILE=`/bin/date +%Y%m%d`.log
DIR=/root/crontab/log/

/root/crontab/csv.bat > $DIR$DATEFILE


とかってバッチファイルを作ります。
例えばこれを
/root/crontab/aaa.sh
とします。

あとは
49 13 * * * /root/crontab/aaa.sh 1>/dev/null 2>/dev/null
とかってやればOKです。

あ、標準出力&エラーを/dev/nullに叩き込むかどうかは
各自ご判断をお願いいたします :-P
ツッキー
会議室デビュー日: 2005/08/22
投稿数: 5
投稿日時: 2005-09-07 17:46
angelさん、がるがるさんありがとうございました。
シングルクォートを省けばファイル名できました。
バッチファイルのバッチファイルは既にやりましたが、ただ、どうしても、この部分が
納得いかなかったので、どうやったらできるのかと思い質問しました。

たいへん参考になりました。ありがとうございました。
1

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