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