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