【问题标题】:crontab output nothing when calling a .sh that contains an output调用包含输出的 .sh 时,crontab 不输出任何内容
【发布时间】:2016-04-07 12:24:49
【问题描述】:

我在/home/me 文件夹中有以下test.sh 文件

#!/bin/sh
_now=$(date +"%Y_%m_%d")
_file="/home/me/$_now.txt"
speedtest-cli --simple > $_file 

speedtest-cli 是一个 python 脚本,它提供互联网和 dll 速度信息:https://github.com/sivel/speedtest-cli

/home/me 调用test.sh 效果很好:我的yyy_mm_dd.txt 输出包含所有信息(dll 加速等)。

但是当我尝试从 crontab 调用 test.sh 时,我得到一个空的 yyy_mm_dd.txt 文件(里面什么都没有)。

内部crontab-e

20 20 * * *  /home/me/test.sh

我是不是做错了什么?

【问题讨论】:

  • 是的,我认为你做错了:看起来你没有从你的 cron 作业中检查 stderr ;-) 一个 cron 作业在与你运行脚本时不同的环境中运行你的登录外壳。

标签: linux shell output crontab


【解决方案1】:

我怀疑是路径问题,所以

选择一个:

  • 在脚本顶部添加PATH=/usr/local/bin:/bin:/usr/bin
  • crontab -e 的顶部添加:PATH=/usr/local/bin:/bin:/usr/bin 在自己的行中
  • source ~/.bashrc 在脚本顶部
  • 为脚本中的每个命令添加完整路径

【讨论】:

  • 不是~/.bashrc吗? [带点]
  • 感谢 Gilles,它工作正常。我选择了第一个选项:PATH=/usr/local/bin:/bin:/usr/bin
【解决方案2】:

你的PATH 可能与你的交互式shell 和你的cronjob 运行的上下文不同,所以你应该在你的crontab 条目中指定speedtest-cli 的完整路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多