最近2>&1 >>
に切り替えました&>>
持つ方法はありますか?存在する/bin/bashをシェルとして使用しますか?デフォルトでは/ bin / shを使用し、マニュアルページには他の使用法に関する指示はありません。でも使用できますcrontab
。SHELL=/bin/bash
これが私にもたらす主な質問は次のとおりです。
echo "do-smth.sh &>> logfile" | at now + 8 hours
私のログファイルにstdoutとstderrを追加するのではなく、完全に失われ、電子メールも受信できませんでした。
予期しないリダイレクトのため、この回避策は機能しません。
echo "bash <<< \"do-smth.sh &>> logfile\"" | at now + 8 hours
私はLinux、Ubuntu 11.10バージョンを使用しています。これは重要ではありません。
答え1
問題は、コマンドの書き方がherestringリダイレクトを処理しようとし(代わりにsh
Ubuntuに接続されている)演算子がないことです。あなたはおそらくこれが欲しいでしょう:dash
bash
<<<
echo 'bash -c "do-smth.sh &>>logfile"' | at now + 8 hours
答え2
記録上、これは私がユースケースで経験したものです。方法に注意してください真剣に避けられない一重引用符または二重引用符エスケープのために難読化されました。
pidof -x pngcrush || at now <<< 'time nice bash -c '\''
(for f in $(find orderlog/ -mtime -1 -name \*.png);
do convert -trim +repage -colors 64 -depth 6 -verbose $f $f.tmp;
ls -lFa $f*;
touch -r $f $f.tmp && mv -f $f.tmp $f;
done;
time find orderlog/ -mtime -3 -name \*.png -execdir pngcrush -bit_depth 8 -d ~/tmp -oldtimestamp {} + ;
mv -fv ~/tmp/*.png orderlog/;
timeout 1h time find orderlog/ -mtime -2 \( -name \*.png -o -name \*.gif \) -execdir optipng -keep -preserve -o6 -v {} + ;
rm -vf orderlog/*.png.{bak,tmp} ) &> orderlog/imgshrink.log'\'' '
読みやすくするには、ここに改行を追加してください。
スクリプトの中にあるので、ここから文書に変換する必要があるほど進化しました。存在する(非)解析を破ることを恐れない限り読む強く打つ。
答え3
#!/bin/bash
cronが実行しているスクリプトの上部でこれを行うとどうなりますか?使用するスクリプトを含むディレクトリを作成すると、そのディレクトリをソース管理下に置いてハードドライブへのアクセス権が失われた場合に回復するのが簡単になります。 puppet、Chef、またはAnsibleを使用してこれらのスクリプトをインストールし、crontabに1行のエントリのみを追加して実行することもできます。