したがって、スクリプトのこの部分が機能しないという問題があります。何が起こっているのか正確にはわかりませんが、変数内の特定の文字をエスケープしていないためだと感じています。運が悪かったので、次のことを試しました:
crontab -l | sed "s%$CTMP%\*\/$FREQ \* \* \* \* cd $DIR && \.\/$SCRIPT%" | crontab -
各変数の内容は次のとおりです。
CTMP 変数は、crontab ファイルの 1 行です。
CTMP='*/5 * * * * cd /home/admin/whatever && ./test.sh'
FREQ
変数は、cron ファイルの分単位の時間設定です。
FREQ=5
DIR 変数は現在の作業ディレクトリです
DIR='/home/admin/whatever'
SCRIPT 変数は単なるスクリプト ファイル名です。
SCRIPT='test.sh'
問題は、上記のこれらの変数内で必要な文字をエスケープしていないため、sed ステートメントが crontab ファイルを更新していないことだと思います。
それは正しいですか、それとも何か間違っていますか?
* アップデート *
CTMPESC=$(sed 's/[\*\.]/\\&/g' <<<"$CTMP")
DIRESC=$(sed 's/[\*\.]/\\&/g' <<<"$DIR")
SCRIPTESC=$(sed 's/[\*\.]/\\&/g' <<<"$SCRIPT")
crontab -l | sed "s%$CTMPESC%\*/$FREQ \* \* \* \* cd $DIRESC && \./$SCRIPTESC%" | crontab -
* アップデート *
これがcrontab出力です
*/10 * * * * cd /home/administrator/anm-1.5.0 */7 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh*/7 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh ./anm.sh
また、トラブルシューティングのために、エスケープされた 3 つの変数をエコーしました。
\*/7 \* \* \* \* cd /home/administrator/anm-1\.5\.0 && \./anm\.sh
/home/administrator/anm-1\.5\.0
anm\.sh
エスケープされた 3 つの変数は、実際には見栄えがします。
* アップデート *
置換前の cron ファイル:
*/10 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh
置換後の cron ファイル:
*/7 * * * * cd /home/administrator/anm-1.5.0 */10 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh*/10 * * * * cd /home/administrator/anm-1.5.0 && ./anm.sh ./anm.sh
どういうわけかそこに投げ込まれたすべての余分なジャンクを参照してください?