2009-02-28 50 views
2

如果我從/home/<user>/<dir>/script.sh運行腳本,以root身份cron的工作得很好。但是,如果我從/root/<dir>/script.sh運行腳本(再次以root身份),cron似乎不起作用。的Cron不運行從/根

+0

沒有代碼它會得到難以;-) – 2009-02-28 21:42:37

回答

2

我想你需要添加一些信息。我猜這是一個權限的事情。在你的crontab中添加文件,目錄和行的權限,這樣我們可以提供幫助。另外,如果你把它放在/ root中,你是否在root的crontab中運行它?

0

這可能是因爲你正在尋找腳本相對目錄/文件被從/家運行時,它位於/而不是從/根,因爲/根不是在/ home /根,也沒有它看起來像用戶homefolder在/ home/

你可以檢查,看看它是否正在尋找相關文件,或發佈的腳本?

另一個說明,爲什麼你不把它設置爲從用戶的homefolder運行呢?

2

記住環境 - 尤其是當cron而不是root身份運行。當cron運行某些東西時,與通過at運行命令不同,您的環境可能沒有太多設置。目前還不清楚你的當前目錄是什麼。因此,對於將由cron運行的命令,請使用腳本(如您已經這樣做),並確保它設置足夠的環境以使其運行。並確保您的環境設置代碼不是交互式的!

在我的機器,我有這樣一個機制,cron的條目(例如)讀取:

23 1 * * 1-5 /usr/bin/ksh /work1/jleffler/bin/Cron/weekday 

Cron目錄weekday腳本是一個標準的腳本的鏈接,首先設置環境和然後運行命令/work1/jleffler/bin/weekday(在這種情況下 - 它使用命令的名稱來確定要運行的內容)。

Cron目錄中的實際腳本是:

:  "$Id: runcron.sh,v 2.1 2001/02/27 00:53:22 jleffler Exp $" 
# 
#  Commands to be performed by Cron (no debugging options) 

#  Set environment -- not done by cron (usually switches HOME) 
. $HOME/.cronfile 

base=`basename $0` 
cmd=${REAL_HOME:-/real/home}/bin/$base 

if [ ! -x $cmd ] 
then cmd=${HOME}/bin/$base 
fi 

exec $cmd ${@:+"[email protected]"} 

我已經使用了一段時間了 - 這個版本自2001年 - 和它的作品一種享受我。我正在使用基本(Sun Solaris 10)實現cron;在其他平臺上的cron新版本中可能會有新功能,以使其中的一些不必要。 (該$REAL_HOME的東西是我的怪事;假裝它說$HOME - 儘管這使得一些腳本不需要你的。)的.cronfile負責環境設置 - 它確實不少,但是這是我的問題,不是你的。

3

已經使用「的cron」相抵觸時,在過去的各種默認$路徑運行,我總是充滿了絕對的$ PATH拼寫爲每個可執行文件和每個目標文件。我總是假設'cron'沒有設置$ PATH,並且沒有當前工作目錄。

換句話說不要使用如下命令

 "myprocess abc*.txt" 

,但這樣做完全一樣

 "/usr/localbin/myprocess /home/jvs/abc*.txt". 

或者,創建一個bash腳本,做這項工作,並調用bash腳本具有完全絕對路徑,如

 "/usr/local/bin/myprocess_abc_txts". 

如果您需要在腳本中有一定的靈活性,請使用env在你用'cron'調用的bash腳本中專門設置的修飾變量。

0

另一種方式來運行sh腳本是將您的bash腳本在/usr/bin目錄,並簡單地運行命令bash yourscript.sh無需添加/usr/bin/目錄