Linux系統中的nohup命令本身并不支持設置超時時間。但是,我們可以巧妙地結合timeout命令來實現這一功能。
以下示例演示如何使用timeout命令限制nohup命令的運行時間:
假設您有一個名為my_script.sh的腳本,希望它在后臺運行,并在3600秒(1小時)后自動終止。您可以使用以下命令:
timeout 3600 nohup ./my_script.sh &
timeout命令會先啟動nohup ./my_script.sh,并在指定時間后強制結束該進程。&符號將命令放入后臺運行。
為了在超時后獲得通知,您可以使用更復雜的腳本:
timeout 3600 nohup ./my_script.sh > /dev/NULL 2>&1 & # 獲取timeout進程的PID timeout_pid=$! # 等待timeout進程結束 wait $timeout_pid # 檢查timeout進程的退出狀態碼 if [ $? -eq 124 ]; then echo "命令超時!" else echo "命令正常結束。" fi
這段腳本將nohup命令的標準輸出和標準錯誤重定向到/dev/null,避免輸出干擾。 $! 獲取后臺進程的PID,wait命令等待該進程結束,最后根據退出狀態碼判斷是否超時。超時狀態碼通常為124。
通過以上方法,您可以有效地控制nohup命令的運行時間,避免長時間運行的進程占用系統資源。 請記住替換my_script.sh為您的實際腳本名稱。