我写了一个运行一些命令的shell脚本。我添加了一种逻辑,每24小时运行一次此脚本。但是它只运行一次,然后不运行。 脚本如下:
#!/bin/bash
while true; do
cd /home/ubuntu/;
DATE=`date '+%Y-%m-%d'`;
aws s3 cp --recursive "/home/ubuntu/" s3://bucket_name/$DATE/;
rm -r -f ./*;
# sleep 24 hours
sleep $((24 * 60 * 60))
done
为什么不每24小时运行一次?脚本运行时没有出现任何错误。复制大约需要10分钟。
答案 0 :(得分:1)
好的做法是再次运行多次以保护脚本。
在这种情况下,可以确定只有1个实例在运行。
#!/bin/bash
LOCKFILE=/tmp/block_file
if ( set -o noclobber; echo "$$" > "$LOCKFILE") 2> /dev/null;
then
trap 'rm -f "$LOCKFILE"; exit $?' INT TERM EXIT
while true; do
cd /home/ubuntu/;
DATE=`date '+%Y-%m-%d'`;
aws s3 cp --recursive "/home/ubuntu/" s3://bucket_name/$DATE/;
rm -r -f ./*;
# sleep 24 hours
sleep $((24 * 60 * 60))
done
rm -f "$LOCKFILE"
trap - INT TERM EXIT
else
echo "Warning. Script is already running!"
echo "Block by PID $(cat $LOCKFILE) ."
exit
fi
您可以运行不受挂断影响的脚本。
nohup
是UNIX实用程序,它运行指定的命令而忽略通信丢失信号(SIGHUP)。因此,即使用户注销,该脚本也将继续在后台运行。
nohup ./yourscript.sh
创建的文件/tmp/block_file
将安全运行脚本,以防止多次运行。要完成它,请按ctrl+c
或在终端中运行kill -11 pidofyourscript
,这样/tmp/block_file
将被删除。
脚本的输出放在文件nohup.out
中。
要在后台运行(首选方式):
nohup ./yourscript.sh &
答案 1 :(得分:-1)
您的脚本可能由于不活动或退出Shell而被杀死。正确的方法是使用cron,如@ Christian.K所述。参见https://help.ubuntu.com/community/CronHowto