(私に)奇妙な動作が発生しました。私は大きなスクリプトを書いていましたが、うまくいきます。 crontab 定義タスクでスクリプトを実行しようとすると、次の行が原因で問題が発生します。
down_ubuntu14=https://cloud-images.ubuntu.com/trusty/current/
ubuntu14=trusty-server-cloudimg-amd64-disk1.img
Ubuntu14_Date_Web=$(wget -qO- $down_ubuntu14 | grep $ubuntu14 | awk '{print $8 $9}' | sed -e "s/<.*>/ /g" | cut -d">" -f2 | awk '{print $2}')
最後の行では、特定のダウンロード先の日付を取得するためにダウンロードサイトを削除しました。
soi 5076 5075 0 09:35 ? 00:00:00 wget -qO- https://cloud-images.ubuntu.com/trusty/current/
soi 5077 5075 0 09:35 ? 00:00:00 grep trusty-server-cloudimg-amd64-disk1.img
soi 5078 5075 0 09:35 ? 00:00:00 awk {print $8 $9}
soi 5079 5075 0 09:35 ? 00:00:00 sed -e s/<.*>/ /g
soi 5080 5075 0 09:35 ? 00:00:00 cut -d> -f2
soi 5081 5075 0 09:35 ? 00:00:00 awk {print $2}
パイプが改行を引き起こしたり、文字列の各部分を単一のプロセスで開始したようです。
あなたの答えとアドバイスに心から感謝します。もっと正確な例を見てみました。
次のような短いスクリプトを設定すると:
down_ubuntu14=https://cloud-images.ubuntu.com/trusty/current/
ubuntu14=trusty-server-cloudimg-amd64-disk1.img
Ubuntu14_Date_Web=$(wget -qO- $down_ubuntu14 | grep $ubuntu14 | awk '{print $8 $9}' | sed -e "s/<.*>/ /g" | cut -d">" -f2 | awk '{print $2}')
echo $Ubuntu14_Date_Web | tee /tmp/test
echo "Just another test line" | tee -a /tmp/test
SSHコンソールで実行すると、テストファイルに次のものが表示されます。
cat /tmp/test
14-Jun-2018
Just another test line
crontabに次の行を入力します。
20 6 * * * /home/soi/scripts/test.sh
これでcronによってスクリプトが起動し、プロセスリストに次のことがわかります。
soi 6508 6507 0 06:20 ? 00:00:00 /bin/sh -c /home/soi/scripts/test.sh
soi 6509 6508 0 06:20 ? 00:00:00 wget -qO- https://cloud-images.ubuntu.com/trusty/current/
soi 6510 6508 0 06:20 ? 00:00:00 grep trusty-server-cloudimg-amd64-disk1.img
soi 6511 6508 0 06:20 ? 00:00:00 awk {print $8 $9}
soi 6512 6508 0 06:20 ? 00:00:00 sed -e s/<.*>/ /g
soi 6513 6508 0 06:20 ? 00:00:00 cut -d> -f2
soi 6514 6508 0 06:20 ? 00:00:00 awk {print $2}
...そして、ログファイル/tmp/testに空白を1つだけ記録します。ログに次の内容のみを記録します。
cat /tmp/test
Just another test line
この問題の主な理由を理解していません。誰かがここに悟りをもたらすことを願っています。
答え1
ほとんどのcron実装はプロセスを含むシェルを起動せず、代わりにシェルを使用してパイプを解析し、2つのプロセスを別々に実行します。 script.shにコマンドを追加してcronから呼び出すと機能します。
答え2
少なくともそれはLinuxのインストールに固有のようです。私はこのスクリプトを5つの異なるコンピュータとLinuxのバージョンで試しましたが、どこでもうまく動作します。だから私たちはボックスを再インストールすることにしました。
皆様のご支援とアイデアに心から感謝します。とても感謝しています。
乾杯、フランキー