我编写了一个执行命令和其他脚本的脚本。其中一些操作需要时间。当我从 CLI 手动执行脚本时,它可以正常工作,等待每条指令结束后再执行下一条指令。
但是,当我将脚本放入 cronjob 中时,即使在每条指令后使用“wait”命令,它也不会等待指令结束后再开始下一条指令。
结果,我把空邮件发走了。
有人知道是什么导致了这种行为的差异吗?在此先感谢您的帮助。
编辑:cron 作业行
20 17 28 * * bash /home/rancid/running_script/for_crontab.sh
和脚本
# This scripts create an error file by reading the logs of rancid.
# Once the error file is created, It archives the logs in a tar archive
# and delete the logs files. It then send the error file as attachment
# by e-mail
REPO="/home/rancid/running_script"
# versionning and logs by rancid
echo "Versionning des confs par rancid en cours..."
rancid-run &
wait
# Create error file from what can be found in rancid log files
# (one per rancid group)
echo "Creation du fichier d'erreur en cours.."
bash $REPO/create_rancid_error_from_log.sh &
wait
# Create tar archive with the log files and then delete the logs
bash $REPO/tar_logs.sh &
wait
# Sending email with error file made earlier as attachment.
echo "Preparation du mail en cours..."
bash $REPO/mailmonitoring.sh &
wait
# Backup of rancid finished
echo "sauvegarde hebdomadaire terminee"
答案1
我认为你应该把 去掉&
,这样wait
就过时了。你可以用 来代替 ,sleep 2
以确保一切都按时到位。
#!/bin/bash
REPO="/home/rancid/running_script"
# versionning by rancid
echo "Versionning des confs par rancid en cours..."
rancid-run &
sleep 10
# Creation du compte-rendu d'erreur
echo "Creation du fichier d'erreur en cours.."
bash $REPO/create_rancid_error_from_log.sh
sleep 2
# Archivage des logs suivi de leur supression
bash $REPO/tar_logs.sh
sleep 2
# Envoie du mail
echo "Preparation du mail en cours..."
bash $REPO/mailmonitoring.sh
sleep 2
echo "sauvegarde hebdomadaire terminee"