【发布时间】: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 -
太棒了。我只是将脚本中的相对路径更改为绝对路径,嘿嘿!我自己不会得出这个结论......我只是赞成你的回答。再次感谢您的意见。