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

writing a cron job prgrammatically to crontab file does not run

我正在使用以下 java 代码

将 cron 作业写入我的 crontab 文件
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 选项卡条目,因此应该执行它。我在这里遗漏了什么吗?

crontab 调度程序不仅仅是一个文件。这是一个 运行 作为守护进程的进程。当您传统上编辑 crontab 文件时,它会保存 crontab 条目并重新加载 crontab 进程。由于这个原因,简单地写入文件将无济于事。您将需要重新加载或重新启动 cron 守护程序。

Update

如果您在服务器上具有 root 访问权限,则可以使用以下命令重新启动 cron 守护程序:

/etc/init.d/cron reload

因此,在服务器上 Java 程序 运行ning 中,您需要执行以下操作:

Runtime.getRuntime().exec("/etc/init.d/cron reload");

这将 运行 系统命令重新启动 cron 守护进程并重新加载 cron 条目。

希望对您有所帮助!

Update 2

不同风格的 Linux 有不同的重启服务或守护进程的命令。

您可以以此为起点检查哪个命令将作为参数进入上述 exec 方法。

Cron Command Syntaxes on different Linux Versions

尝试以下操作:

crontab -r
crontab /var/spool/cron/crontabs/multi

(edit) 我相信 Java,你可以这样称呼它们:

Runtime.getRuntime().exec("crontab -r");
Runtime.getRuntime().exec("crontab /var/spool/cron/crontabs/multi");

第一个删除现有的 crontab。第二个安装新的 crontab。然后你可以通过做验证:

crontab -l