2013-02-17 68 views
1

所以我認爲這個概率很可能是路徑。但是我很困惑如何正確設置它。需要幫助設置cron。腳本在ssh中工作正常

所以我的腳本的頂部看起來像:

#!/bin/sh 


MYSQL="$(which mysql)" 
if [ -z "$MYSQL" ]; then 
    echo "Error: MYSQL not found" 
    exit 1 
fi 

當我運行在SSH的腳本,它的工作原理知府!但是,當我安裝了cron的,在管理嚮導使用以下命令:

/home/username/script.sh 

也試過:

/bin/sh /home/username/script.sh 

他們兩個給我下面的錯誤:

Error: MYSQL not found 

因此,這裏是什麼我在網上發現:

SHELL=/bin/sh 
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin 
HOME=/var/log 

我假設我需要在腳本中至少添加上述語句之一。該服務器是一個freebsd服務器,我假設一切都在默認位置。我知道什麼時候我做什麼它回來/ bin/sh

我不知道如何檢查PATH或家庭。我是freebsd的新手,所以任何幫助都會很棒。

感謝, 布賴恩

回答

0

我只是做一個受過教育的猜測,我只熟悉Debian的,但運行的cron任務根和運行這些非交互式。這意味着它將獲得與root用戶相同的路徑,並且在設置路徑之前,通常非交互式提示會從.bash_profile退出。

TL; DR:檢查您的root用戶是否具有MYSQL變量,並檢查root用戶的.bash_profile是否不會在非交互式提示中退出。

1

Crontab作業由系統提交,不執行正常的系統啓動腳本(它設置PATH和類似的東西)。

我做我的光輝所有工作外殼在Solaris和我的所有腳本的開頭添加類似如下的行:

#!/bin/ksh 
#------------------------------------------------------------------------------- 
# /opt/app/batch/daily_dns.ksh Daily DNS Batch process via crontab 
# 16 3 * * * /opt/app/batch/dns/bin/daily_dns.ksh > /opt/app/batch/daily_dns.log 
#------------------------------------------------------------------------------- 
. /etc/profile 

你可能需要做同樣的事情。

0

您可以閱讀env(1)聯機幫助頁並使用它來診斷&修復您的問題, 或只是在腳本內修復環境(如果您願意的話)。

正如你所提到的那是一個freebsd服務器,我的猜測是你的mysql安裝在/ usr/local下 - 這不包含在cron默認的$ PATH中。

0

這是因爲PATH問題。您可以根據上述答案在crontab文件中指定路徑變量,也可以修改腳本。

如果您決定對後者的決定,這裏有什麼需要進行修改,

  1. 在您的標準終端,運行「這其中」找出「其中」的確切路徑(通常爲「/usr/bin/which」)
  2. 將腳本中的命令「which」替換爲完整路徑。

現在你可以使用和cron腳本 - 「/bin/sh的/路徑/到/你/腳本」,在crontab。在這種情況下,您不需要在crontab文件中添加任何額外的路徑變量。

希望這會有所幫助。