2013-03-26 103 views
0

我遇到了一個特殊問題,我已經設置爲通過crontab運行每分鐘的shell腳本。當作爲定時任務運行時,shell腳本不能完全運行

我使用Pelican作爲博客平臺,並希望半自動化網站在有新帖子時更新的方式。爲此,我創建了一個腳本在與內容相同的目錄中查找名爲respawn的文件(它通過Dropbox進行同步,因此我只是在那裏創建了與服務器同步的文件)。

編寫該腳本時,如果文件respawn存在,則會重建博客並刪除它。如果不是,它會退出。

這裏的所謂publish.sh

#!/bin/bash 
Respawn="/home/user/content/respawn" 
if [ -f $Respawn ] 
then 
    sudo /home/user/sb.sh;rm $Respawn 
else 
    exit 0 
fi 
exit 0 

腳本下面是shell腳本在crontab

* * * * * /home/user/publish.sh

最後,這裏有sb.sh

make html -C /var/www/site/

內容

現在,如果我通過SSH運行腳本,並且存在respawn,則它可以很好地工作。但是,如果我讓cron執行它,那麼它不會運行shell腳本,但它仍會刪除respawn文件。

我有一個其他的cron工作,每4小時運行一次,它只是運行sb.sh,它完美地工作(萬一我忘記發佈一些東西)。

我試過使用用戶的crontab以及將其添加到根目錄,而且我還將用戶添加到sudoers文件,以便它可以在沒有密碼干涉的情況下運行。這兩者似乎都不起作用。我錯過了什麼嗎?

+0

一個明顯的猜測是,cron沒有找到'sudo'的路徑,你可以嘗試在腳本中放置'/ usr/bin/sudo',而不是'sudo'嗎? – favoretti 2013-03-26 12:28:29

+0

此外,爲了防止'respawn'文件被移除,可以在命令之間放置'&&',而不是';',那麼只有當第一個命令返回'0'時,第二個命令纔會被執行,即成功。 – favoretti 2013-03-26 12:29:31

回答

1

它必須是sudocron無法輸入密碼。 檢查運行cron的用戶的郵件以確認。類似於sudo: no tty present

+0

用戶和root都有'/ usr/bin/make'作爲'PATH'。奇怪的是,如果我將它添加到根crontab或用戶的上面的腳本不起作用。 – jordanmerrick 2013-03-26 12:51:17

+0

好吧,那一定是'sudo'。 cron不能輸入密碼。檢查運行cron的用戶的郵件以確認。像「sudo:沒有tty禮物」。 – suspectus 2013-03-26 13:27:18

+0

是的!感謝嫌疑人,就是這樣!你描述的確切的錯誤信息是坐在那裏讓我錯過:)我將這標記爲答案。很多,非常感謝。 – jordanmerrick 2013-03-26 14:42:33

0

嘗試改變sudo /home/user/sb.sh;rm $Respawn

/home/user/sb.sh;rm $Respawn

sudo沒有必要在這種情況下運行命令,因爲它會被調用反正作爲根。

+0

謝謝,但它似乎沒有什麼區別('sudo'仍然需要用戶執行腳本,但即使將其添加到用戶的crontab它仍然不會執行腳本的那部分) – jordanmerrick 2013-03-26 12:52:57

+0

是上面的根用戶crontab或另一個用戶權限選項卡? 如果是另一個用戶,可以用這行'USERNAME ALL =(ALL)NOPASSWD:/ home/user/sb.sh'將它們添加到sudoers中 – bsmoo 2013-03-26 13:21:43