2015-12-15 75 views
1

我想在Ubuntu平臺上的crontab上運行一個shell腳本。我曾嘗試使用Google和其他鏈接,但目前爲止沒有任何幫助。sh文件沒有在cron上運行ubuntu

這是我crontab

*/2 * * * * sudo bash /data/html/mysite/site_cleanup.sh 

這是我sh文件的內容:

#!/bin/sh 
# How many days retention do we want ? 
DAYS=0 

# geting present day 
now=$(date +"%m_%d_%Y") 

# Where is the base directory 
BASEDIR=/data/html/mysite 

#where is the backup directory 
BKPDIR=/data/html/backup 

# Where is the log file 
LOGFILE=$BKPDIR/log/mysite.log 

# add to tar 
tar -cvzf $now.tar.gz $BASEDIR 

mv $now.tar.gz $BKPDIR 

# REMOVE OLD FILES 
echo `date` Purge Started >> $LOGFILE 
find $BASEDIR -mtime +$DAYS | xargs rm 
echo `date` Purge Completed >> $LOGFILE 

同樣的腳本從終端運行,並給出了期望的結果。

+1

我想你沒有一個叫做「sudo」的用戶,如果這是'/ etc/crontab',用'root'替換'sudo'。 –

+0

我的壞我沒有保留任何sudo,*/2 * * * * bash /data/html/mysite/site_cleanup.sh。謝謝paulo –

+0

這個crontab文件在哪裏?我的意思是,它在'/ etc /'下,還是用'crontab -e'編輯? –

回答

0

嘗試將此行添加到用戶root的crontab並且沒有sudo。 這樣的:

*/2 * * * * bash /data/html/mysite/site_cleanup.sh 
+1

如果腳本具有適當的散列函數,那麼'bash'就沒用了。 – Jens

+0

那麼''bash'正在重寫shebang,如果放到它自己的設備上,它將使用'/ bin/sh'本身。 –

2

因非交互式shell腳本

一般的故障排除把set -x; exec 2>/path/to/logfile在腳本上記錄所有後續命令的文件,因爲它們可以運行。如果這不起作用,你會知道你的腳本根本沒有運行;如果是這樣,你會知道它失敗的方式和方式。

如果這是一個個人的crontab

如果你正在運行crontab -e作爲用戶(不sudo),那麼被修改在crontab是一個命令與該用戶的權限運行。檢查文件權限是否允許該用戶修改相關內容(如果這些文件位於cgi-bin目錄中,則可能需要由與Web服務器相同的用戶運行)。

如果您意圖是有命令以root身份運行,而不是作爲自己的用戶,可以肯定的編輯crontab來編輯系統crontab來代替(但請小心爲腳本的正確性當您使用sudo這種情況下 - 粗心例如缺少引號或缺乏適當的預防措施,在xargs使用可導致腳本錯誤刪除文件如果創建惡意的文件名):

sudo crontab -e    ## to edit the system (root) crontab 

...或者,如果你正在清洗up用戶擁有的文件(例如:檢查哪個帳戶對於您自己的操作系統是正確的TEM和Web服務器):

sudo -u apache crontab -e ## to edit the apache user's crontab 

故障排除系統的crontab

不要企圖把一個sudo命令cron運行的命令中;與sudo的默認配置相同,它需要將TTY(鍵盤和屏幕)附加到會話才能運行。因此,你的crontab行不應包含sudo,而是應該像下面:

*/2 * * * * bash /data/html/mysite/site_cleanup.sh 
+0

'source'會使用'/ bin/sh'(除非在crontab的頭文件中有'SHELL ='行),這會顯着改變行爲。 –

+0

重構,我認爲downvote是因爲這使我更像一個問題清單而不是一個規範的答案(其中一些不太可能是有成效的;例如,以root身份運行的cron工作並不特別可能缺乏閱讀訪問)。誠然,OP有時並沒有提供足夠的信息來建立規範的答案,但鼓勵在不充分的問題中增加信息就是評論。 –

+0

我試圖編輯這個以消除不確定的相關性問題,並以更規範的語氣說話。如果您認爲我過於強硬,請隨時回滾(和/或讓我知道)。 –

1

你的問題很可能是從你的用戶級別的cron須藤電話來了。除非你已經通過編輯bashrc配置文件來允許腳本在沒有sudo的情況下運行,否則每次都會掛起。

因此,您可以查看如何通過修改bashrc配置文件來運行沒有密碼的腳本,如果您在腳本中沒有執行需要超級用戶權限或最後一個權限的腳本,請刪除sudo調用如果你喜歡nano作爲你的編輯器,你可以通過做sudo crontab -esudo env EDITOR=nano crontab -e來從root的cron調用你的腳本。