2016-11-21 131 views
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固件

+0

使用普通文件作为进程锁的存在可能是一个坏主意。如果在任何时候您的cron作业中断或者NAS在运行时重新启动,那么.lock文件将不会被删除,并将其置于“正在运行”的永久状态。考虑使用类似['flock']的东西(https://linux.die.net/man/1/flock)来取代锁定。 –

+0

而不是检查文件的存在,检查进程的存在。如果需要,将进程ID存储到文件中,并使用保存的进程ID检查进程是否存在。 – alvits

回答

0

不一定是答案(虽然有一个小的机会,它可以是答案),我会建议你改变“WORKING_FILE的位置“to/tmp - 在每次启动时清除此文件夹(检查您的Linux发行版确保这是您的默认设置),并且即使您的脚本无法完成此操作,也会删除控制文件。