【问题标题】:Issue with scheduling a bash script with crontab使用 crontab 安排 bash 脚本的问题
【发布时间】:2015-08-18 10:51:35
【问题描述】:

使用:

20 21 * * *  /bin/sh /Users/username/Documents/first.sh

执行我的脚本,顺便说一句,它在顶部:

#!/bin/sh

相反,我得到了这个:

You have new mail in /var/mail/username

输出如下:

/Users/username/Documents/first.sh: line 3: wget: command not found
/Users/username/Documents/first.sh: line 4: wget: command not found

我该如何解决这个问题?

【问题讨论】:

  • 每次运行 cron 脚本时都会收到一封电子邮件。电子邮件包含所有输出。
  • @EdHeal 根据我邮件中的信息进行了修复。如果你会被记录在那里,你能解释为什么“错误”吗?
  • 这里解释一下chrontab邮件系统:man7.org/linux/man-pages/man5/crontab.5.html(搜索邮件)
  • Crontab 在后台运行。执行时你不在房间里
  • 要么将 wget 放入 PATH。 IE。获取脚本以更新 PATH 环境变量或将完整路径放在命令前面

标签: linux bash unix terminal crontab


【解决方案1】:

即使您以某种方式使您的 cron 工作正常工作,但我真的想指出您的“解决方案”似乎无关紧要。

  1. “bash first.sh”不是一个好主意,因为脚本的开头以“#!/bin/sh”开头,这意味着:您只需“first.sh”,系统就会解释它使用“/bin/sh”。

  2. “cd /Users/username/Documents”不能解决“找不到命令”的问题。

这实际上是 cron 作业的常见问题。根本原因是:cron 作业(在本例中为 first.sh)在“干净”环境中运行。也就是说,您的个人资料没有来源。因此,PATH env var 只包含最少数量的路径,不幸的是“wget”不在这些路径中。

解决方案:简单明了。你可以

  1. 使用绝对路径调用 wget 等。或者
  2. 在脚本开始时相应地设置 PATH(或相应配置文件中的源)。

为了安全起见,我们通常更喜欢使用绝对路径调用外部命令(wget 等)。

【讨论】:

    【解决方案2】:

    谢谢大家,我找到了解决办法:

    我修改了我的 crontab 文件:

    34 21 * * * cd /Users/username/Documents && bash first.sh

    【讨论】:

    • 所以路径在本地.bashrc中
    猜你喜欢
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2019-08-28
    • 2013-06-02
    相关资源
    最近更新 更多