1
我寫了一個名爲「wp」的bash腳本,它將文件上傳到ftp服務器。它使用wput實用程序。它從文本文件中獲取文件列表。上傳完成後,它會在文本文件中用雙十字線註釋掉該行。根據日誌文件中的最後一行檢測上載是否成功。我的問題是如何避免多次啓動我的腳本?我想,如果在實例運行與p纖ep檢測,但不能正常工作:如何避免多次啓動bash腳本?
#!/bin/bash
if [ "$(pgrep ^wp$|wc -l)" -eq "2" ]
then
echo "$(pgrep ^wp$)"
echo "$(pgrep ^wp$|wc -l)"
echo "wp script is starting..."
else
echo "$(pgrep ^wp$)"
echo "$(pgrep ^wp$|wc -l)"
echo "wp script is already running!"
exit
fi
server="ftp://username:[email protected]"
logfile=~/uploads.log
listfile=~/uploads.txt
list_backup=~/uploads_bak000.txt
while read f;
do
ret=""
if [ "${f:0:1}" = "#" -o "$f"1 = 1 ]
then
if [ "$f"1 = 1 ]
then
:
#echo "invalid string: "$f
else
#first character is remark sign # then empty command -> :
echo "remark line skipped: "$f
fi
else
#while string $ret is empty
while [ -z "$ret" ]
do
wput "$f" --tries=-1 "$server" 2>&1|tee -a $logfile #> /dev/null
ret=$(tail -n 1 "$logfile"|grep "FINISHED\|Nothing\|Skipped\|Transfered")
done
if [ -n "$ret" ]
then
cat $listfile > $list_backup
awk -v f="$f" '{if ($0==f && $0!~/#/) print "#" $0; else print $0;}' $list_backup > $listfile
fi
fi
done < $listfile
Thx,使/ tmp中的一個emtpy目錄解決了問題。我認爲它必須在我的腳本結尾被刪除,但是如果我的腳本被Ctrl + C中止並且我想重新啓動它,會發生什麼?由於存在鎖定目錄,它不會啓動。 – Konstantin
@Konstantin,你需要閱讀BashFAQ鏈接,答案就在那裏。 –
@Konstantin:您需要使用trap命令確保在捕獲信號後執行rm。但正如格倫所說:請閱讀BashFAQ的其餘部分。它包括其他寶石,例如一個很好的解釋,說明爲什麼你會選擇mkdir而不是其他方法,提及剩下的需要考慮的陳舊鎖定風險(如果是kill -9)和「flock」,如果你可以使用在Linux上。 – kamjagin