[英]Bash empty variable after running cron, but runs manually
我有一個簡單的bash腳本,該腳本在終端上可以工作,但是在cron提供空變量之后。
#!/bin/bash
gwip=`/usr/bin/nmcli dev list iface eth0 | grep IP4-SETTINGS.GATEWAY: | awk '{ print $2}'`
printf '%s\n' "$(date) =- $gwip -= " >> /var/log/looog.log
運行: /bin/bash /test.bash
在文件/var/log/looog.log中的輸出:
1 monday 2016 14:17:36 +0300 =- 23.18.117.254 -=
當我通過cron運行時,變量為空。
*/1 * * * * root /bin/bash /test.bash
在文件/var/log/looog.log中的輸出:
1 monday 2016 14:19:13 +0300 =- -=
為什么變量$ gwip為空? 如何解決?
僅滿足/usr/bin/nmcli
是不夠的-您正在調用一堆需要從PATH中找到的其他工具。
同樣,通常-在調試cron作業時,安排其stderr進入文件,如下所示:
#!/bin/bash
# log stdout and stderr to two different files
exec >>/var/log/looog.log 2>>/var/log/looog.err.log
# ...and log every command we try to execute to stderr (aka looog.err.log)
set -x
# set a PATH variable
export PATH=/bin:/usr/bin
# original code here, using modern POSIX $() syntax, vs old hard-to-nest ``
gwip=$(nmcli dev list iface eth0 | awk '/IP4-SETTINGS[.]GATEWAY:/ { print $2}')
printf '%s\n' "$(date) =- $gwip -= "
這里的關鍵是顯式設置的PATH(在cron作業中常見的問題是未在PATH中設置期望的值)和stderr日志(確保可以通過讀取其內容來識別其他任何問題)。
請注意, looog.log
使用單個重定向到looog.log
。 當您只運行一個print語句時,這並沒有什么大的區別,但是如果您將這個腳本擴展為包含多個腳本,則只打開一個輸出文件比重新打開每個文件更有效。時間你有東西要寫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.