2014-01-11 76 views
0

我想在我離開後的指定時間後開啓監控攝像機。註銷後的後臺任務

我想象它是這樣的:

sleep 60 && sudo service motion start &> /dev/null & 

但後臺任務似乎被刪除時,我退出。即使我離開後,是否還有辦法讓它堅持下去?並且還擁有root權限?

編輯: 好吧,我最終作出一個腳本,它不是用一個命令它,它看起來大約是這樣的:

#!/bin/bash 

if (($UID > 0)); then 
     echo "Only root can run this script" 
     exit 1 
fi 

if [ -z $1 ]; then 
    TIMEOUT=30 
else 
    TIMEOUT=$1 
fi 


sleep $TIMEOUT && service motion start &>/dev/null & 

exit 0 

回答

1

使用的nohup:

sudo nohup service motion start & 
+0

問題在於它要求在後臺輸入密碼。否則,我認爲這是一個好主意,因爲它似乎以root身份啓動,即使在註銷後仍然保留在那裏。所以只要我能讓它首先要求輸入密碼。 –

+0

我喜歡anishsane的想法,事先運行「最小sudo」。嘗試'sudo echo「現在開始服務動作」; sudo nohup服務動作開始&'。 (還有其他可能性:允許您的帳戶通過/ etc/sudoers使用「服務」,或讓您的相機可以訪問您的帳戶,因此不需要以root身份運行服務。) – leu

+0

我想保留服務命令和相機受保護而不受root用戶的限制。問題在於等待一段時間,然後運行sudo(身份驗證可能已超時),並且在註銷時仍保留在那裏。所以我編寫了一個腳本來完成我需要的功能(請參閱原文)。 –

0

nohup,您還可以使用screen

screen 
sudo service motion start 

然後鍵入CTRL+a,然後輸入d來分離屏幕。

要重新安裝,你可以簡單地使用:

screen -x 

欲瞭解更多信息:

man screen 
0

有2個問題在這裏:

  1. 執行您註銷後的東西。 (我想你打算把它放在〜/ .bash_logout中,這是一個好主意)
  2. sudo下執行,這可能很困難。

下面是常用的方法:

  1. nohup sudo (sleep 60; service motion start) & 
    #Has issues, if sudo authentication is not complete till this point, since background process cannot prompt you for sudo password. Better to call `sudo true` or `sudo echo -n` or similar dumb command, under sudo before calling the actual command. 
    
    #You may be tempted to call sudo only for service command, instead of entire command. 
    However, there is a risk that if sleep interval is long enough, then sudo token may expire. 
    
  2. echo service motion start | sudo at now+1min 
    #The problem with this command is that the granularity is minute level, not seconds level. Otherwise, this looks clean to me. 
    

根據您的要求,您可以選擇其中任一,或在其他的答案中提到的任何其他機構。