【问题标题】:Setup a cron on a bash script but its not running在 bash 脚本上设置一个 cron 但它没有运行
【发布时间】:2020-07-28 15:42:54
【问题描述】:

我在服务器中有一个 bash 脚本,我想在每个工作日的上午 10:30 运行该脚本,所以我设置了这样的玉米作业:

crontab -e

30 10 * * 1-5 /home/ubuntu/mydir/scripts/。我的脚本.sh

但它没有运行...如果我错过了任何步骤,谁能帮助我?

【问题讨论】:

  • /home/ubuntu/mydir/scripts/myscript.sh 并确保您chmod +x myscript.sh
  • @DavidC.Rankin 我试过这个但没有工作....这是一个 bash 脚本,如果我手动运行我使用这个命令的脚本“.myscript.sh”
  • 如果您使用了.,它可能是不同类型的脚本。如果muscript 在这样的目录中,请尝试使用/bin/bash /home/ubuntu/mydir/scripts/myscript.sh。但是 sourced 脚本的来源通常是有原因的,因此它们可能无法完全正常工作。
  • @NiladriDey : 如果 cron 不能运行程序,应该有一些东西写在 stderr 上,但是 cron 默认通过电子邮件发送 stdout 和 stderr。你检查了吗?
  • 另请注意,cron 通常使用/bin/sh 解释脚本,因此您使用的任何 bashism 都将不起作用。这就是为什么您还需要指定解释器,在脚本顶部使用#!/bin/bash 或通过在/bin/bash -c "/home/ubuntu/mydir/scripts/myscript.sh" 处执行您的脚本——在这种情况下,您的脚本不需要是可执行的。对困惑感到抱歉。请注意,当您使用 ./name.sh 运行脚本时,./ 会明确消除要运行的脚本的歧义。它说在绝对路径 ${PWD}/name.sh 上运行脚本,不要费心在 PATH 上搜索它。

标签: bash shell cron


【解决方案1】:

你让 cron 执行命令

/home/ubuntu/mydir/scripts/. myscript.sh

但是/home/ubuntu/mydir/scripts/. 是一个目录,而不是一个文件。 . 是一个引用目录本身的特殊目录条目,因此您的命令只是一种有点复杂的编写方式

/home/ubuntu/mydir/scripts myscript.sh

因此 cron 无法运行它。不过,它应该会给出一条错误消息。例如,当我使用ash 运行这样的命令时,我会收到消息

.:权限被拒绝

因为一个目录当然没有被执行的权限。

如果脚本是为 bash 设计的,你会写

/bin/bash /path/to/myscript.sh

或者您将 bash 的 #! 行放入 myscript.sh 并作为 crontab 条目

/path/to/myscript.sh

【讨论】:

  • 根据您的建议,我设置了这样的 cronjob 46 17 * * 1-5 /bin/bash /home/ubuntu/path/test.sh 并且文件以 #/ /bin/ 开头sh 仍然没有运气.....我错过了什么吗?
  • 在这种情况下,错误的#! 行无关紧要。 “没有运气”是什么意思?您可能错过了一些调试。例如,您可以使用-x 运行它并调查日志以查看它在哪里退出。 cron 将通过邮件向您发送 stdout 和 stderr;或者,您可以将 stdout 和 stderr 重定向到日志文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 2012-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多