以编程方式将 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
方法。
尝试以下操作:
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
我正在使用以下 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
方法。
尝试以下操作:
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