【问题标题】:cronjob not executing script as expectedcronjob 未按预期执行脚本
【发布时间】:2019-02-25 09:21:38
【问题描述】:

我有这个脚本在运行 Freebsd 10 的 Juniper 路由器上运行。我面临的问题是当 cronjob 运行这个脚本变量 ($current_mem) 时没有显示任何值,因为结果记录器也不能记录该值。任何人都知道发生了什么。

#!/bin/bash
localpid=$$
renice -n +1 $localpid &
current_mem="test"
echo "$current_mem" <<<<shows right value 
current_mem=$(cli -c "show task memory" | grep "Currently In Use" | awk 
'{print $5}' | grep -o '[0-9]*')
echo "$current_mem" <<<<<<<<<<"when cron is running it show's nothing"
if [ "$current_mem" -gt "65" ]
then
echo "$current_mem" <<<<<"shows nothing"
logger -t JTASK_OS_MEM_HIGH -p "external.notice" "Using more then 65 
percent of available memory Current utilization:$current_mem" <<<<<

else
echo "$current_mem"
logger -t JTASK_OS_MEM_NORMAL -p "external.notice" "Using less then 65 
percent of available memory Current utilization: $current_mem"

fi

当我使用 sh task_mem.sh 运行此脚本时,脚本运行良好,但当我通过 cron 运行它时,它不会显示/转储变量的值。这就是我为 cron 工作所拥有的

# crontab -l
*/1 * * * * sh /var/tmp/task_mem.sh >> 
/var/tmp/task_mem_cron.log

【问题讨论】:

  • &lt;&lt;&lt;&lt;&lt;&lt;&lt; 是您稍后添加的吗?这是无效的语法,会导致脚本失败。
  • clilogger 可执行文件在 /bin 或 /usr/bin 中吗?如果没有,它可能找不到它们,因为 cron 作业在非常小的环境下运行(包括PATH)。看我的回答here
  • 试试这个来调试你的 cron:stackoverflow.com/a/49296678/1135424
  • 也使用-x 进行调试模式。因此,在脚本的开头更改此行 #!/bin/bash -x
  • @thatotherguy 我添加了

标签: bash shell cron freebsd


【解决方案1】:

@GordonDavisson 那就是“cli”在 /usr/sbin/cli 而不是 /bin 中,结果 cron 无法执行它。一旦我添加了完整路径,它就开始工作了。非常感谢您的帮助

【讨论】:

    猜你喜欢
    • 2016-09-07
    • 2016-02-02
    • 2017-06-23
    • 2021-01-22
    • 2013-08-20
    • 2017-12-15
    • 2011-02-25
    • 2012-11-23
    • 2014-10-20
    相关资源
    最近更新 更多