San*_*nex 2 linux variables bash cron
我有一个简单的 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
Run Code Online (Sandbox Code Playgroud)
跑: /bin/bash /test.bash
文件 /var/log/looog.log 中的输出:
1 monday 2016 14:17:36 +0300 =- 23.18.117.254 -=
Run Code Online (Sandbox Code Playgroud)
当我运行 cron 时,变量为空。
*/1 * * * * root /bin/bash /test.bash
Run Code Online (Sandbox Code Playgroud)
文件 /var/log/looog.log 中的输出:
1 monday 2016 14:19:13 +0300 =- -=
Run Code Online (Sandbox Code Playgroud)
为什么变量$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 -= "
Run Code Online (Sandbox Code Playgroud)
这里的关键是显式设置的 PATH(没有您期望在 PATH 中设置的值是 cron 作业中的常见问题)和 stderr 日志(确保可以通过读取其内容来识别任何其他问题)。
请注意使用单个重定向到looog.log预先。当您实际上只运行一个打印语句时,这不会产生显着差异,但是如果您将此脚本扩展为多个,则只打开一个输出文件比每次都重新打开它更有效有时间写点东西。
| 归档时间: |
|
| 查看次数: |
1344 次 |
| 最近记录: |