簡體   English   中英

Shell 腳本從命令行運行,而不是 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM