在Ubuntu中规划Java应用的定时任务

背景

  用Java写了一个桌面工具,需要定时执行(类似于Quartz的定时任务)。于是想到了使用Ubuntu系统的定时执行任务的机制,例如:crontab。

原材料

  • Java应用,支持命令行参数
  • Ubuntu系统 16.04 LTS

过程

(1) 编辑文件 /etc/crontab

root@app01:~# cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

编辑 /etc/crontab 新增行,例如:

0/5 * * * * root cd /home/user01/tools && java -jar Too.jar -pY

结果到了时间点,任务确没执行。但相同命令在命令行下执行是ok。

(2) 在目录 /etc/cron.d中添加文件

root@app01:~# cat /etc/cron.d/foo
0/5 * * * * root sh /home/user01/tools/foo.sh 1>>/home/user01/tools/foo-out.log 2>>/home/user01/tools/foo-error.log

再定义foo.sh文件

root@app01:/home/user01/tools# cat foo.sh 
#!/bin/bash

cd /home/user01/tools

java -jar Tool.jar -pY

其中主要的改善是将执行log进行输出。结果发现是找不到java进程!
这个时候才明白是路径问题,记得在/etc/crontab文件中有指定PATH变量。
找到问题就好办了,使用java文件的全路径即解决问题。

root@app01:/home/user01/tools# cat foo.sh 
#!/bin/bash

cd /home/user01/tools

/home/jdk1.8.0_73/bin/java -jar Tool.jar -pY

结果OK。

收获

  1. 对于定时执行应用程序,要养成输出log的好习惯。
  2. 注意环境变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值