2016-07-16 172 views
2

我有,我想每15分鐘要執行的bash腳本執行的,所以我說這行我的crontab:bash腳本手動運行在終端,而不是從crontab中

7,22,37,52 * * * * /path/to/my/script.sh 

我檢查目錄路徑是正確的,如果我只是從任何目錄手動運行/path/to/my/script.sh,腳本就會正確運行。我有這樣的爆炸行我的腳本:

#!/usr/bin/env bash 

我的腳本還引用其他的腳本在同一目錄下,因爲它,我已經運行chmod +x上所需的所有腳本。我設置了MAILTO到我的郵箱地址,我得到了一些cron守護程序的郵件時,我改了行,我crontab來:

7,22,37,52 * * * * sh /path/to/my/script.sh 

但我從來沒有收到郵件時使用

7,22,37,52 * * * * /path/to/my/script.sh 

7,22,37,52 * * * * bash /path/to/my/script.sh 

我確定cron正在運行,我也嘗試將腳本的輸出重定向到一個日誌文件,該文件也僅在包含sh時寫入。但是,如果我從主目錄運行sh /path/to/my/script.sh,它不起作用。我的腳本實際運行的唯一方式是如果(來自任何目錄)我撥打/path/to/my/script.shbash /path/to/my/script.sh。我非常喜歡編寫bash腳本,所以我們非常歡迎任何幫助。

+0

有關使用'cron'問題更適合superuser.com或unix.stackexchange.com。 – Barmar

+0

啊是的。我忘記了......但配置cron對於很多人來說是一個常見問題。 – Xofo

+0

一定要閱讀https://help.ubuntu.com/community/CronHowto – Xofo

回答

1

crontab項應具有以下格式

m h dom mon dow command 

這證實了以下

7,22,37,52 * * * * /path/to/my/script.sh 

您的輸入是正確的。話雖如此,您必須關閉crontab編輯器(:wq)才能使更改生效。

建議您通過[ this ]跨站點帖子來描述cron作業可能存在的問題。


更多hashbang [ here ]

+0

我一直保存並正確關閉我的crontab編輯器我想,退出後,我收到一條消息:crontab:安裝新的crontab。 – pvas

+0

@pvas:你是否按照我的鏈接和其他答案中提到的提示?我還建議重新啓動cron守護進程 – sjsam

3

@pvas cron用戶環境應該特別小心處理。大多數用戶的假設是他們可以訪問路徑,目錄,權限等。這遠不是這種情況。 Cron在最小的環境中運行,您必須設置一切 - 路徑,權限和腳本運行的位置。

1)我自己設置了環境。

2)我在我的crontabs中使用完全擴展的路徑。

3)我確定任何需要讀取的目錄都有讀取權限。

4)我確定我的密碼不會過期,因爲那樣會阻止cron。

5)確保底層腳本被顯式調用(通過Perl,Bash,Python)。

6)將cron行上的命令傳輸到LOG文件(甚至更好的是帶有TIMESTAMP的日誌文件)。

修復這些問題然後重試。克倫是特別的,你需要設置一切。

例如:

#SETUP ENVIRONMENT 
SHELL=/bin/bash 
source /home/userfoo/.bash_profile 

#RUN THE SCRIPT everyday at 11:50pm (23:50) 
50 23 * * * userfoo /home/userfoo/script.sh >> LOGFILE.txt 

< <

+0

我驗證了您的列表中的所有內容在我的結尾都是正確的,並將我的行更改爲:7,22,37,52 * * * * my_username /path/to/my/script.sh,包括我的用戶名在你的例子中,現在Cron守護進程的電子郵件說:/ bin/sh:1:my_username:找不到,即使我運行echo $ USER,我會得到my_username。有任何想法嗎? – pvas

+1

現在工作嗎?還要確保script.sh中沒有相對路徑,而且它的cd是從它被調用的目錄或任何它應該運行的目錄 - 這可能是另一個問題。 同時PIPE一切日誌 7,22,37,52 * * * * bash /path/to/my/script.sh >> LOG.txt – Xofo

+1

我所有的變量都有絕對路徑的聲明 - 唯一的當我在cd'ing到所需目錄後創建文件時,這些是相對的。我還聲明瞭PATH = $ {PATH}:/ path/to/my_bin,並在我的主腳本引用的其中一個腳本中導出PATH。另外,我的主script.sh引用了一些Perl腳本 - 這可能是問題嗎?在所有perl腳本中,我都包含:#!/ usr/bin/env perl。此外,我的LOG.txt文件是空的,雖然它已創建。當我使用bash /path/to/my/script.sh或/path/to/my/script.sh手動運行腳本時,我在命令行中得不到輸出 – pvas

相關問題