![](/img/trans.png)
[英]Shell script runs fine from command line, but not in root cron
[英]Shell script runs from command line, not cron
我有一個腳本,每天一次用一些統計信息更新服務器。 從命令行運行時,該腳本按預期工作,但從 cron 運行時,某些變量不會傳遞給 curl。
以下是代碼示例:
#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin
/bin/sh /etc/profile
MACADDR=$(ifconfig en0 | grep ether | awk '{print $2}')
DISKUSED=$(df / | awk '{print $3}' | tail -n1)
DISKSIZE=$(df / | awk '{print $2}' | tail -n1)
# HTTP GET PARAMS
GET_DELIM="&"
GET_MAC="macaddr"
GET_DS="disk_size"
GET_DU="disk_used"
# Put together the query
QUERY1=$GET_MAC=$MACADDR$GET_DELIM$GET_DS=$DISKSIZE$GET_DELIM$GET_DU=$DISK_USED
curl http://192.168.100.150/status.php?$QUERY1
cron 作業中的結果是http://192.168.100.150/status.php?macaddr=&disk_size=&disk_used=
我不確定變量是否存在問題,或者可能是 awk 試圖解析未指定終端大小的數據等。
任何幫助表示贊賞。
當你遇到這樣的問題時,它幾乎總是一個環境問題。
將“env”的結果轉儲到一個文件並檢查它。 您還可以使用頂行運行腳本
#!/bin/sh -x
看看所有變量發生了什么。 您可能希望使用包裝腳本,以便可以重定向 output 這為分析提供。
腳本ifconfig
中的第一個命令位於 Mac 上的/sbin/ifconfig
中。 並且 cron 作業的默認 PATH 變量設置為: /usr/bin:/bin
這可能是您的命令的 rest 也失敗的原因。
最好在腳本頂部手動設置 PATH。 就像是:
export PATH=$PATH:/sbin
我在使用 crons 時遇到的一個問題是,你認為理所當然的變量並不存在。 您認為理所當然的主要是路徑變量。
從命令行運行時,回顯您設置為路徑的內容,並將其放在腳本的頂部(或 crontab 的頂部)。
或者,指定每個命令的完整路徑 - ifconfig、awk、grep 等。
我想這將解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.