【问题标题】:Shell script doesn't run properly while running from crontab从 crontab 运行时,Shell 脚本无法正常运行
【发布时间】:2018-12-27 22:39:55
【问题描述】:

我阅读了其他相关主题,但它们对我没有帮助。

我有一个 shell 脚本,它检查我的 python 脚本是否没有运行,它会运行它。否则它将只是跳过并且什么都不做。

当我使用时它完全有效: bash myshellscrip.sh 我得到了我想要的结果,那就是做一些任务并向一些通讯员发送电子邮件。但是,当我尝试在 crontab 上运行这个特定的 shell 脚本时,它不会发送电子邮件,也不会执行其他任务。 我在 crontab 上尝试了以下方法,但都没有奏效。

    * * * * * /bin/bash /path/to/my/script/myshellscrip.sh 
    * * * * * /bin/bash /path/to/my/script/myshellscrip.sh >> /some/other/path/output.txt

当我将更改保存到“output.txt”文件时,它会创建该文件,但不会发送电子邮件或执行其他任务。

我也尝试了重启选项,因为我也需要这个程序在启动时运行,但这不起作用:

    @reboot /bin/bash /path/to/my/script/myshellscrip.sh

有人知道怎么解决吗?

编辑:

当我检查最简单的 shell 脚本时,例如:

    #!/bin/sh
    /usr/bin/python /home/pi/DCA/code.py

我的 crontab 在我的 output.txt 文件中没有任何输出,尽管我的 code.py 也有一些输出。

但是,当我使用非常简单的 python 代码时,例如只有一个“打印”语句,它将运行并将输出保存到 output.txt 中。

【问题讨论】:

  • 发布脚本内容
  • 您可能正在使用需要您的环境或交互式 shell 才能正常工作的命令。 see here
  • 请通过cron tag wiki 上的调试步骤并使用错误日志和其他结果更新您的帖子
  • 改用bash -x 执行它;并将标准错误重定向到 output.txt。您这样做的方式是丢弃错误消息。
  • @Sunitha。脚本最简单的内容是:#!/bin/sh /usr/bin/python /home/pi/DCA/code.py

标签: bash shell unix cron


【解决方案1】:

似乎您的 shell 脚本在它可以做某事之前崩溃/停止(可能是由于环境不同或权限问题)。您可以查看/var/log/syslog 了解详情。

您可以尝试删除/bin/bash,我认为没有必要?

【讨论】:

  • /bin/bash 是必要的,如果他/她的脚本中没有 shebang。
  • @DusanGligoric 好吧,他/她/它应该在他/她/它的脚本上开始使用 shebang。
  • @MatiasBarrios shebang 不是强制性的,尽管我同意你的观点,每个脚本都应该有它,所以你写的更多的是一个意见而不是一个有用的评论。
  • @DusanGligoric 是的。我知道。这是关于良好做法的意见。
  • @RRT 我检查了,它似乎没有崩溃。
【解决方案2】:

在调试模式下运行 cron 作业。为此,将 -x 添加到 cronjob 的 bash 命令中,并将其输出保存在文件中。

bash -x /path/to/script.sh >> /path/to/the/output.txt

你可以找到问题。

【讨论】:

  • 该文件将被创建,但它是一个空文件,里面没有任何内容。
  • 如果您的脚本将错误消息重定向到标准错误,请使用 bash -x /path/to/script.sh >> /path/to/the/output.txt 2>&1
【解决方案3】:

显然 crontab 多次运行我的脚本。所以我尝试使用不同的锁定机制在我的脚本周围加锁,但只有使用羊群对我有用。在我的 crontab 中,我添加了这一行:

* * * * * /usr/bin/flock -n /tmp/ms.lockfile /bin/bash /path/to/my/script/myShellScript.sh

【讨论】:

    最近更新 更多