【问题标题】:Cron run every minute ( Runs in bash but not in cron)Cron 每分钟运行一次(在 bash 中运行,但不在 cron 中)
【发布时间】:2015-07-26 17:23:41
【问题描述】:

这在上一篇文章中已经讨论过好几次了。我遵循了给出的建议,但它对我不起作用。我有两个脚本,每分钟由 cron 服务运行。令我惊讶的是,每分钟只运行一次(下面列表中的第 1 个),另一个失败(下面列表中的第 2 个)。最令人惊讶的是,当直接从终端运行时,两个脚本都能正常执行。

Cron setup :
*/1  * * * * /home/user/Desktop/scripts/generatepattern.sh
*/1  * * * * /home/user/Desktop/scripts/getnextfile.sh

文件权限为:

-rwxr--r-- 1 user user 522 Jul 25 16:18 generatepattern.sh
-rwxr--r-- 1 user user 312 Jul 25 23:02 getnextfile.sh

不可调度(不在 cron 中运行)的代码是:

#!/bin/bash
#Generate a file to be used for the search
cd /home/user/Desktop/scripts
no=`cat  filecount.txt`
if test $no -lt 20
then
    #echo "echo less"
    #echo $no
    expr `cat filecount.txt` + 1 >filecount.txt
fi

【问题讨论】:

  • 只需使用mail 命令检查报告的 cron 错误。
  • 第二份工作是否依赖第一份工作完成的工作?无法保证它们会以可预测的顺序运行。如果他们依赖彼此完成的工作,您应该将两者组合成一个脚本,或者编写第三个脚本来运行两者,或者创建一个运行 script1 && script2 的 cron。
  • 另外,一个小提示:*/1 表示以1 的步长值通过分钟范围0-59。这与只是说* 没有步长值完全相同。
  • @DanLowe 重要的是我将脚本的执行分开,因为它们执行不同的工作。
  • 你确定它没有运行吗?如果 filecount.txt 有问题,test 表达式将失败,if 将不会执行,脚本将不执行任何操作。我建议在脚本中添加一些日志记录,这样您就可以更多地了解正在发生的事情。另外,请注意 cron 将同时运行这两个脚本而不是顺序运行,因此它可能会触发从命令行运行它们时看不到的竞争条件。

标签: linux bash shell cron


【解决方案1】:

在最后一行你写了cat filecount.txt 而不是cat /home/user/Desktop/scripts/filecount.txt

【讨论】:

  • 感谢您指出,我已经进行了编辑并尝试了 1 分钟。仍然无法执行。 #!/bin/bash #生成用于搜索的文件 cd /home/user/Desktop/scripts no=cat filecount.txt if test $no -lt 20 then #echo "echo less" #echo $no expr @ 987654324@ + 1 > filecount.txt fi
  • 你能告诉我们/home/user/Desktop/scripts/filecount.txt目前的内容吗?
【解决方案2】:

我发现主要问题是新的 cron 设置只有在 vi 编辑器关闭时才会使用。必须在编辑器上进行更改并发出 :wq 命令,以便安装新设置。仅发出 :w 命令不起作用,因为没有安装发生(这是我的错误)。在 vi 上发出 :wq 命令并显示以下输出后,我意识到了这一点:-

# crontab -e
crontab: installing new crontab

感谢提出的所有其他建议。

【讨论】:

    猜你喜欢
    • 2015-03-27
    • 2018-07-17
    • 2019-06-09
    • 1970-01-01
    • 2013-11-27
    • 2016-07-17
    • 2014-08-07
    • 2019-07-20
    • 2023-04-01
    相关资源
    最近更新 更多