2014-06-13 78 views
0

我有以下腳本:shell腳本 - 啓動碼頭,手動工作正常,但不是通過crontab的

./script.sh. 

的問題是:

#!/bin/bash 
jettyPid=`pgrep -f solr` 

if [ "$jettyPid" == "" ] 
then 
    /etc/init.d/jetty start & 
fi 

,如果一個執行工作正常如果我把這個cron作業,該碼頭將無法啓動,然而,它記錄到我的日誌文件:

出發碼頭:已開始碼頭週五君...

我不明白爲什麼會發生。

回答

4

嘗試設置PATH在你的cronjob文件

在我的情況下,

echo $PATH 
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 

添加路徑在crontab:crontab -e

PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin 

30 5 * * * runmyscript 

您可以檢查this question瞭解更多詳情。

+0

很棒:D工作。非常感謝 – elf

0

你的這個樣子的crontab條目是什麼樣的?

而且,這個腳本的問題可能是你沒有指定bash的解釋:

jettyPid=`pgrep -f solr` 

if [ "$jettyPid" == "" ] 
then 
    /etc/init.d/jetty start & 
fi 

嘗試增加#!/bin/bash作爲第一行的文件中是這樣的:

#!/bin/bash 
jettyPid=`pgrep -f solr` 

if [ "$jettyPid" == "" ]; then 
    /etc/init.d/jetty start & 
fi 

如果您未指定bash,則cron作業將只使用標準系統shell。另請注意,我添加了;並將then移至if行。這種語法對bash腳本的處理方式更爲標準。

以往任何的,如果碼頭的設置要求是全系統$PATH它會失敗的自己的個人$PATH而不是部分的一部分的任何庫。答案chamzzey提供的是正確的,但如果任何路徑改變,這將再次打破。長期來看,如果可能的話,最好從碼頭代碼&設置顯式路徑到庫或所需的工具。

+0

傑克,我對我的劇本感到厭煩。包括PATH chamzzey說,工作正常。謝謝 – elf

相關問題