【问题标题】:Forever List won't show up in Crontab output, but shows up when run from command lineForever List 不会显示在 Crontab 输出中,但会在从命令行运行时显示
【发布时间】:2013-07-07 21:21:47
【问题描述】:

我有一个 bash 脚本,它将forever list 的输出保存到一个字符串中,进行一些操作并将其保存到一个 XML 文件中。在同一个文件中,我还调用了 shell 命令uptime。该文件位于/var/www/html/ytca/rss.sh。如果我执行该命令,则文件将正确更新。我有一个 cron 作业正在运行:

*/2 * * * * /var/www/html/ytca/rss.sh

并在根目录下使用crontab -e 命令创建,forever list 命令没有显示任何内容,但uptime 命令显示内容。

这里有你可能需要的一切:

rss.sh

#!/bin/bash
DATE=`date`
RESULT=`/usr/local/bin/forever list | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"`
OTHER=$(/usr/local/bin/forever list)
upt=`uptime`
String='<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Server Details</title>
<link>http://www.google.com/</link>
<description>Server details for Chris</description>
<item>
<title> Updated: '$DATE'</title>
<link>www.google.com</link>
<guid>abc123</guid>
<pubDate>'$DATE'</pubDate>
<description><![CDATA[Service uptime: '$RESULT';<br/>DbServer uptime: '$OTHER';<br/>Server uptime: '${upt:0:23}']]></description>
</item>
</channel>
</rss>'
echo $String > '/var/www/html/ytca/site/update.xml'

永远:

/usr/local/bin/forever

删除一些不必要的垃圾:

从命令行运行时的输出:

<?xml version="1.0" encoding="UTF-8"?> ...<![CDATA[Service uptime: info: Forever processes running data: uid command... 0:0:23:31.723 ;<br/>DbServer uptime: [32minfo[39m: Forever processes running [9...3:31.932[39m ;<br/>Server uptime: 00:02:57 up 4 days, 48]]></description> </item> </channel> </rss>

从 cron 运行时的输出:

<?xml version="1.0" encoding="UTF-8"?>...<![CDATA[Service uptime: ;<br/>DbServer uptime: ;<br/>Server uptime: 00:00:01 up 4 days, 45]]></description> </item> </channel> </rss>

我已经为此工作了好几个小时,但这似乎没有意义。我已经尝试在 crontab 中回显永远列表,但它最终是空白的。有什么想法吗?

【问题讨论】:

  • /usr/local/bin/ 在你的root's PATH 中吗?
  • 检查OTHER=$(/usr/local/bin/forever list)的输出。当您通过 cron 执行时,似乎 forever 进程甚至没有运行。
  • @devnull Forever 正在运行并且已经运行了数周,并且因为我可以通过命令执行 .sh 文件并且它可以正确更新问题不是永远列表不起作用,而是它从 cron 调用时特别不起作用。
  • @JS웃 是的,这是我回显 $PATH 时得到的结果:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/ bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/bin
  • @ChrisJones cron 是否以能够从命令行成功执行脚本的同一用户身份运行?

标签: bash cron centos crontab forever


【解决方案1】:

forever 进程可能与用户绑定。尝试从 cron 以用户身份执行 rss.sh

*/2 * * * * su - <user> -c /var/www/html/ytca/rss.sh

【讨论】:

    【解决方案2】:

    使您的文件成为可执行文件

    chmod a+x /var/www/html/ytca/rss.sh
    

    【讨论】:

      【解决方案3】:

      所以在尝试了几个小时并没有在网上找到任何合适的东西之后;解决方案实际上非常简单。 将which forever 的输出添加到您的 $PATH 变量中,不包括“永远”,在我的情况下是 /usr/local/bin 。

          PATH=$PATH:/usr/local/bin/
          cmd=`forever list`
          echo $cmd > /home/muzammil/foreverlist.log
      

      会给你正确的输出,而

          cmd=`/usr/local/bin/forever list`
          echo $cmd > /home/muzammilm/foreverlist.log
      

      给了我一个空文件。

      还有一些奇怪的原因,即使我的 $PATH 变量已经包含“/usr/local/bin”,它也不起作用,但只有在 shell 脚本本身中明确提及时才起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-05
        • 1970-01-01
        • 2017-02-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多