簡體   English   中英

Debian bash腳本在命令行中運行良好; 在crontab中失敗

[英]Debian bash script works fine from command line; fails in crontab

我正在嘗試使用DreamHost API(請參閱此處 )使用crontab更新DNS條目。 我寫了以下bash腳本:

#!/bin/bash
dh_api_key=<my api key>
dh_domain=<my fq subdomain>

dh_url="https://api.dreamhost.com/?key=$dh_api_key&record=$dh_domain&type=A"

ip_addr=`ifconfig eth0 | grep "inet addr" | 
    grep -o "\([0-9]\{1,3\}\.\?\)\{4\}" | head -n 1`

old_ip_addr=`wget -q -O - ""$dh_url&cmd=dns-list_records"" | 
    grep $dh_domain | grep -o "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"`

dh_url="https://api.dreamhost.com/?key=$dh_api_key&record=$dh_domain&type=A"
dh_url_add="$dh_url&cmd=dns-add_record&value=$ip_addr"
dh_url_del="$dh_url&cmd=dns-remove_record&value=$old_ip_addr"

echo $ip_addr
echo $old_ip_addr

if [ "$ip_addr" == "$old_ip_addr" ]
then
    echo SAME
else
    echo DIFFERENT; UPDATING
    wget -q -O - "$dh_url_del"
    wget -q -O - "$dh_url_add"
fi

我的crontab條目如下所示:

0,15,30,45 * * * * /home/<username>/dreamhost_api/dns_update_script > /home/<username>/dreamhost_api/dns_update_script.out # <-- note the redirection

如果我手動運行腳本,我會得到以下輸出:

<old ip address>
<new ip address>
DIFFERENT; UPDATING

......並且所有內容都應該更新。 如果我讓crontab運行該作業,則更新永遠不會發生。 當我查看dns_update_script.out文件時,我看到:

<blank line>
<blank line>
SAME

因此,當腳本由crontab運行時,腳本似乎沒有ip_addr和old_ip_addr變量(這當然意味着更新永遠不會發生)。 知道為什么嗎? 在crontab中使用時管道不起作用(或有一些注意事項?)?

crond代表用戶運行腳本時,腳本將不具有用戶從命令行獲得的相同環境變量。 腳本經常會失敗。 這些是像PATHLD_LIBRARY_PATH這樣的變量,依此類推。

將腳本文件中的行添加到腳本中,以使其獲取您的登錄腳本: /etc/profile以及其他任何腳本。

創建此crontab條目:

* * * * *  set > /tmp/mycronenv.txt

將更改保存到crontab 等一兩分鍾。 回去擺脫那個條目。 最后:

set > myenv.txt
diff myenv.txt /tmp/mycronenv.txt

這將告訴你我的意思。 如何糾正它取決於你。 兩個輸出必須相同才能運行腳本。

因為$ ip_addr和$ old_ip_addr在從cron運行時結束時都是空白,或許打開xtrace然后檢查cron調用的結果輸出可以給你關於什么不起作用的線索。

set -x

在ip_addr =行之前應該做的伎倆。 然后讓cron運行,你應該在生成的電子郵件中獲得一堆輸出(或者你可以將輸出重定向為另一個用戶提到的。記住xtrace發送到stderr,所以使用像

* * * * * script >/tmp/outputfile 2>&1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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