Linux cron.daily的脚本
我需要让我的Java程序每天在linux机器上运行一次。所以我创建了一个简单的文件,只有一行:Linux cron.daily的脚本,linux,cron,Linux,Cron,我需要让我的Java程序每天在linux机器上运行一次。所以我创建了一个简单的文件,只有一行: java -jar /opt/location/my_jar.jar 并将其放入etc/cron.daily,假设它每天运行一次。但它根本不运行。我尝试使用.sh扩展名,或者干脆使用没有扩展名的文件名。不过,运气不好 我在谷歌上搜索了一下,得到了很多相互矛盾的信息。有人能帮忙吗 编辑: 我根据萨蒂什和米特兰迪尔给出的答案总结了现在的情况 1.我使用vi创建了run_conversions脚本,以解决
java -jar /opt/location/my_jar.jar
并将其放入etc/cron.daily,假设它每天运行一次。但它根本不运行。我尝试使用.sh扩展名,或者干脆使用没有扩展名的文件名。不过,运气不好
我在谷歌上搜索了一下,得到了很多相互矛盾的信息。有人能帮忙吗
编辑:
我根据萨蒂什和米特兰迪尔给出的答案总结了现在的情况
1.我使用vi创建了run_conversions脚本,以解决windows上的行尾字符问题。现在脚本是
#!/bin/sh
/usr/bin/java -jar /opt/location/my_jar.jar
2.我把它放在/etc/cron.hourly中
3.检查/var/log/cron上的日志,我看到它每小时都在开始运行和完成运行转换。到目前为止还不错
4.但我的jar文件似乎没有运行。我之所以知道这一点,是因为当它正常运行时,它应该更新一个数据库——而数据库没有更新
5.奇怪的是:当我手动运行cron.hourly时,却调用
run-parts /etc/cron.hourly
jar文件被正确命中,数据库正在更新
总而言之:当在运行部件中运行它时,它是有效的。当让它自己每小时运行时,它不会
有什么想法吗
编辑2:
根据Satish、Mithrandir和vahid的建议,我将我的跑步转化率改为如下:
#!/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
Feb 24 09:30:01 backsome CROND[7933]: (root) CMD (/opt/tf/conversions/run_conversions_loc)
我从cron.hourly中删除了脚本,并将这一行添加到crontab:
*/10 * * * * /opt/tf/conversions/run_conversions_loc
脚本现在每10分钟运行一次,并在cron日志中注册,如下所示:
#!/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
Feb 24 09:30:01 backsome CROND[7933]: (root) CMD (/opt/tf/conversions/run_conversions_loc)
到目前为止看起来不错。但是应该更新的数据库没有更新
深入研究,jar文件aff_networks2.jar正在本地目录中寻找一个ftr.properties
文件——它所在的目录。该文件存在于该目录中。但它读得不正确。我知道这一点,因为在输出文件runconversions.txt中,应该从属性文件读取的值为null
要完成这幅图,有两件事:
/run\u conversions\u loc
从shell运行脚本时,它会运行,找到属性文件,并更新数据库。我以root身份登录到shell中,我还以root身份创建了所有相关文件,并以root身份安装了用于在crontab中调用脚本的行#!/bin/sh
/usr/bin/java -jar /opt/location/my_jar.jar
检查/usr/bin/java
是否是命令的实际安装位置(哪个java
)。
将文件的权限更改为可执行:
chmod +x /opt/location/my_jar.jar
将文件更改为:
#!/bin/sh
/usr/bin/java -jar /opt/location/my_jar.jar
检查/usr/bin/java
是否是命令的实际安装位置(哪个java
)。
将文件的权限更改为可执行:
chmod +x /opt/location/my_jar.jar
这可能是您的环境变量 在执行脚本时,它是否与当前登录的用户一样工作 如果是的话 运行: 然后获取输出并将其放在脚本顶部,然后在2分钟后尝试另一个cron,看看它是否有效 更新了对Eddy 2013年2月24日评论的回复。 我想给你一个关于crontab的速成班
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
希望这有助于解决这个问题它可能是您的环境变量 在执行脚本时,它是否与当前登录的用户一样工作 如果是的话 运行: 然后获取输出并将其放在脚本顶部,然后在2分钟后尝试另一个cron,看看它是否有效 更新了对Eddy 2013年2月24日评论的回复。 我想给你一个关于crontab的速成班
[root@04 cron.daily]# run-parts /etc/cron.daily
/etc/cron.daily/ldiscan:
kcore: Value too large for defined data type
/etc/cron.daily/test.sh:
Hello World #1