0
我使用SpiderOak客户端将我的NAS服务器数据备份到云中。几个月来,这一直运作良好。然而,今天,运行了一段时间之后,cronjob进程陷入了睡眠状态。我需要帮助确定为什么以及如何修复Linux bash脚本处于睡眠状态
我最近丢失了一直运行良好的cronjob脚本,所以我必须编写一个新的bash脚本。也许我犯了一个错误。那就是:
#!/bin/sh
WORKING_FILE=/volume1/Volume_1/spideroak.lock
RESULT_FILE=/volume1/Volume_1/spideroak.log
# Cancel if there is an ongoing backup
if [ -f "$WORKING_FILE" ]
then
echo "Error: $WORKING_FILE already exists; backup is already running."
exit 1;
fi
# Run backup and save results to file with the name that gets checked above
/opt/SpiderOakONE/usr/bin/SpiderOakONE --batchmode --verbose --redirect="$WORKING_FILE"
# Rename log once backup is complete
mv "$WORKING_FILE" "$RESULT_FILE"
# Set log file permissions and exit
chmod 644 "$RESULT_FILE"
echo "Backup complete. Result saved to $RESULT_FILE"
我最近也更新了NAS的固件,但不知道这是否可以通过把持久的过程睡觉发挥作用。如果我将备份命令替换为只需几秒钟即可完成的事情,则一切正常。例如:如果我将--batchmode --verbose
替换为--selection
,并保持原样。
的NAS是可让Synology DS-216 +运行DSM 6.0.2-8451 Update 4
固件
使用普通文件作为进程锁的存在可能是一个坏主意。如果在任何时候您的cron作业中断或者NAS在运行时重新启动,那么.lock文件将不会被删除,并将其置于“正在运行”的永久状态。考虑使用类似['flock']的东西(https://linux.die.net/man/1/flock)来取代锁定。 –
而不是检查文件的存在,检查进程的存在。如果需要,将进程ID存储到文件中,并使用保存的进程ID检查进程是否存在。 – alvits