【问题标题】:writing a cron job prgrammatically to crontab file does not run以编程方式将 cron 作业写入 crontab 文件不会运行
【发布时间】:2016-08-23 23:20:27
【问题描述】:

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

【问题讨论】:

  • 我不知道这是否是一个好习惯。但是您的cron 条目可能由于sudo 而没有运行。 sudo 要求输入用户密码。
  • 我理解这不是一个好习惯,但正如@anacron 所说,我们可能必须启动或重新加载 cron 守护进程。这在编程上是可能的吗?如果 cron 选项卡条目由于 sudo 而没有运行,那么我如何能够写入文件?
  • 更新 -- 删除 sudo 没有帮助!!!

标签: java linux cron crontab


【解决方案1】:

尝试以下方法:

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

【讨论】:

  • 非常感谢!!!!这成功了。想知道这是否也允许我通过将其附加到 crontab 文件来一次执行多个 cron 作业。
  • 是的,您应该能够将作业附加到文件并以这种方式重新加载。调用 'crontab -r' 并不是真正必要的,但调用它不会影响您的文件。
  • 嗯...也会试试的!! @flu 再次感谢!
  • @flu - 是否有任何替代方案可用于 javascript 中的相同解决方案?基本上在 NodeJS 中?
  • @ShruthiBhaskar - 嗨,对不起,我不熟悉 javascript,但这是一个 shell 命令。所以我只想检查javascript是否以及如何与shell交互并调用命令,那么它很可能是可能的。
【解决方案2】:

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

【讨论】:

  • 您对我们如何以编程方式重新加载或重新启动 cron 守护程序有什么建议吗?更具体地说,使用 java ?
  • 您的 Java 程序是否在同一台服务器上本地运行?
  • 谢谢!!这看起来很有希望。一旦我在我的系统上,我会试一试,让你知道结果。
  • 您的回答很有帮助。再加上@flu answer,我能够让它工作。非常感谢!!
猜你喜欢
  • 2011-05-29
  • 2020-05-08
  • 2015-01-03
  • 2014-04-04
  • 1970-01-01
  • 2014-06-26
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多