【问题标题】:shell script not running the other script inside itshell脚本没有在其中运行其他脚本
【发布时间】:2013-02-25 06:02:37
【问题描述】:
#!/bin/bash
value=$(</var/www/sym_monitor/man.txt)


if [ "$value" == "true" ]; then

     ps -ef|grep sym |grep -v grep |awk '{ print $2 }'|sudo  xargs kill -9;
cd /var/www/symmetric-ds-3.1.6/bin;
sleep 30;

(sudo ./sym --port 8082 --server);

fi

我正在尝试使用 cron 每 10 分钟运行一次上述脚本。在根目录下手动运行脚本运行良好,但是当我尝试在 cron 中运行脚本时,它正在执行 (ps -ef|grep sym |grep -v grep |awk '{ print $2 }'|sudo xargs kill - 9;)并且它没有执行脚本(sudo ./sym --port 8082 --server)并且它没有给出任何错误。有人可以给我建议吗?

【问题讨论】:

  • 脚本的任何输出?这通常通过邮件或系统日志发送,具体取决于您的 cron 配置。除此之外:这可能是路径问题:您没有在脚本中设置工作目录,所以 is ./sym?
  • 什么都没有输出。即使我在脚本(sudo ./sym --port 8082 --server)之前使用 echo $PATH 但它没有打印它(ECHO $PATH;)这是打印路径的正确命令吗?该脚本位于 (/var/www/symmetric-ds-3.1.6/bin) 位置
  • 嗯,首先你必须找出输出的去向。因此,制作另一个输出一些调试字符串的小脚本,通过 cron 启动它并检查输出可能发送到的设置。这也取决于您使用哪个 crontab。全系统? root的crontab?用户的 crontab?从 cron 脚本定向输出有据可查,如果您在这一步遇到问题,我建议您开始阅读 cron 手册页(man crontabman cron)...

标签: linux shell ubuntu crontab


【解决方案1】:

请检查 crontab 是否也在 Bash 中运行。如果没有,那么您可能必须更改您的外壳。

当您手动运行脚本时,./sym 是与您的 shell 相关的位置。它可能与 cron 不同。请使用完整路径执行./sym。

【讨论】:

  • 是的,cron 选项卡也在 bash 中运行。是的,我尝试使用完整路径,但它仍然没有运行。所以我将它拆分并使用(cd /var/www/symmetric-ds-3.1.6/bin)和(sudo ./sym --port 8082 --server)。从命令行手动执行时,此脚本运行得非常好。问题是它没有在 cron 中运行!
  • 您需要检查您的 cron 输出。将错误重定向到文件并丢弃标准输出。使用类似这样的东西` * * * * * /path/to/my_job.sh 1> /dev/null 2> /some/other/path/to/my_job.err` 同样因为你的脚本在手动运行时运行良好root,检查你是否在 root cron 中运行脚本。
  • 是的,我正在根 cron 中运行我的脚本。我已经重定向了输出,但似乎以某种方式回显没有将任何输出提供到我将输出重定向到的文件中。
【解决方案2】:

sudo 可能需要密码,因此会阻止此命令。

我想删除 sudo 会解决问题。

【讨论】:

  • sudo 在 root 下运行时不需要密码。上述脚本中的第一个命令也由 sudo 组成,但它执行得很好,而由 sudo 组成的第二个命令不起作用。
  • 是的,我试过了。它不起作用,因为它需要在命令中使用 sudo 运行我不知道为什么?非常不幸!
猜你喜欢
  • 2016-05-27
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多