以编程方式将cron作业写入crontab文件不会运行

时间:2016-08-23 14:12:28

标签: java linux cron crontab

我正在使用以下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条目,所以它应该被执行。我在这里错过了什么吗?

2 个答案:

答案 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方法的参数。

Cron Command Syntaxes on different Linux Versions

答案 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