簡體   English   中英

運行cron后重擊空變量,但手動運行

[英]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.

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