【问题标题】:Cron Job not working in Linux environmentCron 作业在 Linux 环境中不工作
【发布时间】:2015-01-23 12:36:00
【问题描述】:

我在周一和周五工作时间之间的每一分钟都运行一个 shell 脚本,并认为它运行良好,当我使用“crontab -l”命令时可以看到它。该脚本调用一段 Java 代码来检查 postgresql 表中的某些条件,如果满足这些条件,它会写入另一个表。该脚本位于我们 Linux 服务器上的以下目录中。

/var/lib/tomcat7/webapps/sh

所以假设它被称为“test.sh”,如果我的 cronjob 看起来像这样:

* 08-18 * * 1-5 /var/lib/tomcat7/webapps/sh/test.sh

也就是说,它应该在周一到周五的每天上午 8 点到晚上 18:59 之间运行。我只是尝试通过将虚拟数据添加到 postgresql 表来测试它,以便应该写入另一个表并且什么也没发生。但是,当我从命令行手动运行 ./test.sh 时,它运行良好。问题似乎出在我的 cron 上。如果我输入:

grep CRON /var/log/syslog

我可以看到它今天每分钟都在运行。输出如下所示

Nov 25 12:38:01 webserver CRON[11868]: (ubuntu) CMD (/var/lib/tomcat7/webapps/sh/test.sh)
Nov 25 12:39:01 webserver CRON[11888]: (ubuntu) CMD (/var/lib/tomcat7/webapps/sh/test.sh)
Nov 25 12:40:01 webserver CRON[11953]: (ubuntu) CMD (/var/lib/tomcat7/webapps/sh/test.sh)
Nov 25 12:41:01 webserver CRON[11953]: (ubuntu) CMD (/var/lib/tomcat7/webapps/sh/test.sh)
Nov 25 12:42:01 webserver CRON[11985]: (ubuntu) CMD (/var/lib/tomcat7/webapps/sh/test.sh)

等等。但是,在我更改了 postgresql 表中的数据之后,这似乎没有任何效果。就好像脚本实际上并没有运行一样。虽然当我从命令行手动运行它时它运行得很好。 有没有人在 cron 工作中经历过这种事情,或者对为什么会发生这种情况有任何建议?任何援助将不胜感激。提前致谢!

【问题讨论】:

  • 也许你的脚本里有相对路径,如果你试试/var/lib/tomcat7/webapps/sh/test.sh 可以吗?
  • 嗨达菲达克。你的权利,我试图执行的脚本中有一个相对路径。该脚本首先移动到我的 java 代码所在的目录
  • 抱歉,我不是故意这么快就返回的。第一行读取“cd ../java/JProject/src”,然后在脚本的其余部分继续编译和运行 java。这可能是它没有从 cron 运行的原因吗?
  • 是的,您的工作目录是您启动脚本的位置,因此您需要更改路径或获取脚本所在的目录,然后:cd $myScriptlocation
  • 太棒了。我只是将脚本中的相对路径更改为绝对路径,嘿嘿!我自己不会得出这个结论......我只是赞成你的回答。再次感谢您的意见。

标签: linux shell cron


【解决方案1】:

当您使用/var/lib/tomcat7/webapps/sh/test.sh 启动脚本时,您的工作目录不是/var/lib/tomcat7/webapps/sh 而是/

您可以使用pwd 命令获取当前工作目录或获取脚本位置(请参阅此post 然后:

cd $SCRIPTPATH
cd ../java/JProject/sr

用绝对路径更改相对路径../java/JProject/src

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 2012-02-18
    • 2018-04-09
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    相关资源
    最近更新 更多