我正在使用以下java代码
为我的crontab文件编写一个cron作业PrintWriter writer = new PrintWriter("/var/spool/cron/crontabs/multi","UTF-8");
String cronTabString="25 13 * * * sudo wget --tries=0 \"https://some-url.com:7443/DataUpdater/updateChildren?folderId="+folderId+"&clientId="+clientId+"&clientSecret="+clientSecret+"&refreshToken="+refreshToken+"&deptName="+deptName+"\"";
writer.println(cronTabString);
writer.close();
代码成功写入cron选项卡文件。但它没有运行。我的问题是,甚至可以以这种方式执行cron作业吗?根据我的说法,它是一个有效的cron tab条目,所以它应该被执行。我在这里错过了什么吗?
答案 0 :(得分:3)
crontab
调度程序不仅仅是一个文件。它是一个作为守护进程运行的进程。传统上编辑crontab文件时,它会保存crontab条目并重新加载crontab进程。由于这个原因,简单地写入文件将无济于事。您需要重新加载或重新启动cron守护程序。
<强>更新强>
如果您使用以下命令在服务器上具有root访问权限,则可以重新启动cron守护程序:
/etc/init.d/cron reload
因此,在服务器上运行的Java程序中,您需要执行以下操作:
Runtime.getRuntime().exec("/etc/init.d/cron reload");
这将运行系统命令以重新启动cron守护程序并重新加载cron条目。
希望这有帮助!
更新2
不同版本的Linux具有不同的命令来重新启动服务或后台程序。
您可以将此作为一个很好的起点来检查哪个命令将作为上述exec
方法的参数。
答案 1 :(得分:3)
尝试以下方法:
crontab -r
crontab /var/spool/cron/crontabs/multi
(编辑)我相信Java,你可以这样称呼它们:
Runtime.getRuntime().exec("crontab -r");
Runtime.getRuntime().exec("crontab /var/spool/cron/crontabs/multi");
首先删除现有的crontab。第二个安装新的crontab。然后您可以通过执行以下操作进行验证:
crontab -l