2016-11-21 140 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發行版確保這是您的默認設置),並且即使您的腳本無法完成此操作,也會刪除控制文件。