gpt4 book ai didi

linux - cron.daily 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 09:04:01 25 4
gpt4 key购买 nike

我需要让我的 Java 程序每天在 linux 机器上运行一次。所以我创建了一个只有一行的简单文件:

java -jar /opt/location/my_jar.jar

并将它放在 etc/cron.daily 中,假设它每天运行一次。但它根本不运行。我尝试使用 .sh 扩展名,或者只是没有扩展名的文件名。仍然,没有运气。

我用谷歌搜索了一下,得到了很多相互矛盾的信息。有人可以帮忙吗?

编辑:

我根据 Satish 和 Mithrandir 给出的答案总结了它现在的位置。

1.我使用 vi 创建了 run_conversions 脚本,以解决 Windows 上行尾字符的问题。现在脚本是

#!/bin/sh
/usr/bin/java -jar /opt/location/my_jar.jar

2.我把它放在/etc/cron.hourly。

3.检查/var/log/cron 中的日志,我看到它每小时开始 run_conversions 并完成 run_conversions。到目前为止,一切都很好。

4.但是我的jar文件好像没有运行。我知道这一点,因为当它正常运行时,它应该更新数据库——而数据库没有更新。

5.这是奇怪的事情:当我手动运行 cron.hourly,但调用

run-parts /etc/cron.hourly

jar文件被正确命中,数据库正在更新。

总结一下:当通过 run-parts 运行它时,它起作用了。当让它每小时自行运行时,它不会。

有什么想法吗?

编辑 2:

根据 Satish、Mithrandir 和 vahid 的建议,我将 run_conversions_loc 更改为如下所示:

#!/bin/bash
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bexport SHELL=/bin/bash
/usr/bin/java -jar /opt/tf/conversions/aff_networks2.jar > /opt/tf/conversions/runconversions.txt

我从 cron.hourly 中删除了脚本并将此行添加到 crontab:

*/10 * * * * /opt/tf/conversions/run_conversions_loc

脚本现在每 10 分钟运行一次,并像这样在 cron 日志中注册:

Feb 24 09:30:01 backsome CROND[7933]: (root) CMD (/opt/tf/conversions/run_conversions_loc)

目前看起来还不错。但是它应该更新的数据库没有更新。

深入查看,jar 文件 aff_networks2.jar 正在本地目录中寻找 ftr.properties 文件——与它所在的目录相同。该文件存在于该目录中。但它没有正确阅读。我知道这是因为在输出文件 runco​​nversions.txt 中,应该从属性文件中读取的值为空。

完成图片的两件事:

  1. conversions 目录中的所有内容都具有 777 权限。我知道不建议授予此类扩展权限,但我想确保(至少尝试)这不是问题所在。

  2. 当我通过调用 ./run_conversions_loc 从 shell 运行脚本时,它会运行、查找属性文件并更新数据库。我以 root 身份登录到 shell,我还以 root 身份创建了所有相关文件,并以 root 身份安装了用于在 crontab 中调用脚本的行。

知道为什么 cron 不读取属性文件吗?

最佳答案

可能是你的环境变量

执行脚本时是否以当前用户登录的方式工作?

如果是的话

运行:

env|egrep "(^PATH=|^SHELL=)"|awk '{print "export "$1}'

然后获取输出并将其放在脚本的顶部,并在 2 分钟后尝试另一个 cron 以查看它是否有效

更新了回应 Eddy 2013 年 2 月 24 日评论的答案。

我想给你一个关于 crontab 的速成类。

  1. 可以通过全局/etc/crontab 或在用户下以 crontab -e(编辑特定用户的 cron)或 crontab -l(列表 - 存储在每个用户的/var/spool/cron 中)来设置 crontab<

我看到您正在尝试每 10 分钟运行一次,这在/etc/crontab 中是可以的

我建议提供当前 shell 的整个类路径的原因是因为大多数时候脚本试图使用一个 unix 命令,该命令不作为 crontab 的 PATH 的一部分(位于最顶部)/etc/crontab 文件本身)

要调试路径问题,观察 crontab 正在执行任务的用户的邮箱通常是个好主意:所以 tail -100/var/spool/mail/root 并寻找与该 cron 任务相关的任何消息以及 cron 日志本身,正如有人建议的那样 -

我不认为你的问题是这里的路径..

您正在尝试运行一个 java jar 文件,并且您的 jar 文件可能需要该转换文件夹中的其他文件,并且当您运行它时您已经在该文件夹中....

所以在你的脚本中你可以运行

cd /opt/tf/conversions/;
/usr/bin/java -jar aff_networks2.jar > /opt/tf/conversions/runconversions.txt

但由于这是一个很小的脚本,您可以将整个脚本作为一个 cron 条目并完全绕过 shell 脚本,就像这样

*/10 *    * * *   root cd /opt/tf/conversions/; /usr/bin/java -jar aff_networks2.jar > /opt/tf/conversions/runconversions.txt

希望这有助于解决这个问题

关于linux - cron.daily 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15007640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com