Forever List不会显示在Crontab输出中,但会在从命令行运行时显示

时间:2013-07-10 04:07:39

标签: bash cron centos crontab forever

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

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

使用root下的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中回显永久列表,结果是空白。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

永久过程可能与用户绑定。尝试从cron执行rss.sh作为用户:

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

答案 1 :(得分:0)

将您的文件设为可执行文件

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

答案 2 :(得分:0)

因此,尝试了几个小时后,没有在网上找到任何合适的东西;实际上解决方案很简单。 将 PATH=$PATH:/usr/local/bin/ cmd=`forever list` echo $cmd > /home/muzammil/foreverlist.log 的输出添加到$ PATH变量,不包括&#34;永远&#34;在我的情况下,这将是/ usr / local / bin。

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

时,

会给你正确的输出

stop()

给了我一个空文件。

还有一些奇怪的原因,即使我的$ PATH变量已经包含&#34; / usr / local / bin&#34;它不起作用,但只有在shell脚本本身明确提到时才有效。