CRONと同様に、タスクスケジューラのデフォルトシェルを/ bin / bashに変更します。

CRONと同様に、タスクスケジューラのデフォルトシェルを/ bin / bashに変更します。

最近2>&1 >>に切り替えました&>>

持つ方法はありますか?存在する/bin/bashをシェルとして使用しますか?デフォルトでは/ bin / shを使用し、マニュアルページには他の使用法に関する指示はありません。でも使用できますcrontabSHELL=/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リダイレクトを処理しようとし(代わりにshUbuntuに接続されている)演算子がないことです。あなたはおそらくこれが欲しいでしょう:dashbash<<<

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/bashcronが実行しているスクリプトの上部でこれを行うとどうなりますか?使用するスクリプトを含むディレクトリを作成すると、そのディレクトリをソース管理下に置いてハードドライブへのアクセス権が失われた場合に回復するのが簡単になります。 puppet、Chef、またはAnsibleを使用してこれらのスクリプトをインストールし、crontabに1行のエントリのみを追加して実行することもできます。

関連情報