2014-03-06 100 views
0

我創建了一個/etc/cron.d中稱爲「test_purge」文件,其中包含:如何從cron.d運行cronjob?

00 04 * * * postgres /var/lib/pgsql/test.sh 

這應該是在每天上午運行4 test.sh,對不對?

test.sh有:

#!/bin/bash 
psql -d kettle -c "TRUNCATE TABLE test;" 

我應該做的任何事情就這樣運行?我是否將cron.d中的'test_purge'添加到我的crontab或任何內容?我昨天試圖運行它,但沒有奏效。

+2

使用'crontab -e'添加到您的cron中。另外,確保postgres用戶有權執行腳本。如果'test.sh'沒有'#!/ bin/sh'的頭文件,那麼你應該添加'postgres/bin/sh/var/lib ...' – fedorqui

+0

你通常不使用'crontab -e '用於全局crontab條目。它大體上看起來不錯,但顯然test.sh本身並不是一個有效的shell腳本。 –

+0

爲了防止其他人遇到這種情況,我的問題是在文件名中的點,這是不允許的。請參閱https://bugs.launchpad.net/ubuntu/+source/cron/+bug/706565 – engineerC

回答

0

您的cron文件和腳本似乎是正確的。有些事情要測試。

首先,確保你腳本有執行權限(專爲postgres用戶):

$ chmod +x /var/lib/pgsql/test.sh 

我也想將其設置爲postgres用戶作爲所有者:

$ chown postgres:postgres /var/lib/pgsql/test.sh 

現在。確保psql二進制文件在您的PATH環境映射,對於cron文件,你必須將PATH設置到文件:

PATH=/usr/lib/pgsql/bin:/usr/local/bin/:/usr/bin/:... 
00 04 * * * postgres /var/lib/pgsql/test.sh 

最後,確保你能以某種方式看到腳本輸出,或者通過檢查用戶郵件或通過將輸出重定向到文件,例如:

00 04 * * * postgres /var/lib/pgsql/test.sh > /tmp/test.log 2>&1