【问题标题】:Unable to access jarfile using crontab无法使用 crontab 访问 jarfile
【发布时间】:2019-05-15 08:07:55
【问题描述】:

我有两个要使用 crontab 运行的 jar 文件。假设有一个 A 和 B jarfile。当我想为 A jarfile 运行 crontab 时,crontab 工作正常。但是当我想为 B jarfile 运行时,crontab 无法访问 jarfile。这哪里出了问题?问题出在 jarfile 上,还是出在 crontab 设置上?

这是我的 crontab 设置

0 12,14 * * * 根 /root/folderjarfile/runx.sh >> /root/folderjarfile/nohup.out

【问题讨论】:

  • 这些jar文件是否拥有相同的所有者和权限?
  • @waxtah 如何检查这个?
  • 我会记录标准错误以及标准输出,例如/path/myscript 2>&1 >>/tmp/my.log
  • 你能在 cron 之外运行 B.jar 文件吗(例如从命令行)?要检查所有权和权限,请使用 ls -l A.jar B.jar
  • @GMc 我可以正确运行 B.jar 而无需在命令行中使用 cron

标签: java


【解决方案1】:

我认为您的 jar 文件可能有问题。找到它的可能选项。

  1. 运行没有 crontab 的 jar 意味着提交 java -cp jarPath main-method
  2. 如果选项 1 工作正常,那么您必须重新启动您的 cron 选项卡

    Stop Cron Job: /etc/init.d/crond stop
    Start Cron Job: /etc/init.d/crond start
    

【讨论】:

  • 是和 systemctl stop/start crond 一样的命令吗?因为我在我的服务器中找不到 /etc/init.d/crond ..
  • 我非常怀疑 cron 守护进程需要重新启动。我强烈怀疑调用中存在环境问题(根据经验)
  • @Brian 我在 AWS 中对其进行了测试并重新启动对我有帮助。
【解决方案2】:

Cron 通常不会运行您的配置文件。所以你只得到一个基本的环境。

尝试将以下内容放入你的 runx.sh

env |sort >/tmp/my_cron_env.txt

让您的工作运行并查看您的 PATH 和其他变量。您可能会发现您希望在那里的东西(例如 JAVA_HOME)丢失了。

【讨论】:

  • 那么,我期望的东西会在 my_cron_env.txt 中注明吗?还是我还需要在txt文件中做一些配置?
  • 上面一行会打印出你在cron控制下运行的环境。您可能会发现这些设置比您在终端会话中的设置要简单得多。您可以在终端会话中执行相同的操作(例如env | sort > /tmp/myterm_env.txt)并比较两个文件。
  • 其实我只是重新阅读了您的帖子,您有一个有效,一个无效。所以这可能不是你的问题。您可以将您的 shell 脚本添加到您原来的问题中吗?
  • 您的脚本是否生成了错误消息? 确保将 2>>&1 添加到 cron 作业命令的末尾/root/folderjarfile/runx.sh >> /root/folderjarfile/nohup.out 2>&1 这将捕获输出日志文件 (nohup.out) 中的所有错误消息。
  • 哦,别忘了使用 crontab -e 来编辑 crontab 文件(即您帖子中显示的文件)或 yast 或类似文件。如果您只是直接使用 vi 或记事本程序编辑 crontab 文件,您将需要向 cron 发送信号,告知您已更改了它的配置文件。如果您不确定这意味着什么,请编辑您当前执行的文件,然后重新启动。
猜你喜欢
  • 1970-01-01
  • 2013-09-27
  • 2018-12-17
  • 2022-12-05
  • 2021-07-27
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多