1

我正在尝试在后台执行 python 脚本作为服务。为此,我使用了我在网上找到的这个脚本。

它存储在 /etc/init/myscript.conf 并以 service myscript start 开始

description "MyScript"
author "Sherab Giovannini <shaddycls@gmail.com>"

start on runlevel[234]
stop on runlevel [0156]

chdir /root/projects/myscript
exec /root/projects/myscript/script.py | logger
respawn

但我没有找到如何将标准输出/标准错误重定向到任何地方......我尝试过:

exec /root/projects/myscript/script.py > some.txt 

还与...

exec /root/projects/myscript/script.py >> some.txt

以及我在谷歌上搜索到的每一个组合......对不起,如果这是一个微不足道的问题,但我被卡住了。

谢谢

4

3 回答 3

4

您安装的文件是一个upstart脚本。

尝试以下选项:

# Note the full pathname
exec /root/projects/myscript/script.py > /tmp/some.txt 

或者

# Note the shell command:
exec sh -c "/root/projects/myscript/script.py > /tmp/some.txt"

确认 Python 脚本是可执行的:

$ chmod +x /root/projects/myscript/script.py

检查系统日志文件以查看是否有有用的错误消息:

sudo vim /var/log/messages /var/log/syslog ...

编辑:upstart通常直接执行脚本,因此 shell 重定向字符将无效。一个例外是,如果有一个或其他特殊字符,upstart它将调用。显然不算。所以,在你的新贵脚本中试试这个:/bin/sh$>

exec FOO=$$ /root/projects/myscript/script.py > /tmp/output.txt 2> /tmp/error.txt

参考:

于 2013-11-07T22:42:33.307 回答
0

好吧,最后我找到了这种方法来运行进程并避免缓冲。

nohup python -u /root/projects/myscript/myscript.py > /var/tmp/stdout.log &

感谢所有为这篇文章做出贡献的人。

于 2013-11-08T02:56:18.447 回答
0

Nohup 和 & 是您在带有 bash 的 unix 环境中寻找的一些工具。Nohup 确保在您关闭终端时该命令不会“挂断”。语句末尾的“&”将其置于后台。'>' 和 '>>' 分别用于创建新文件和附加到可能存在的文件。

在 bash 中在控制台上运行它,你会说

nohup cmd >>output.txt 2>error.txt &

如果你打算把它放在一个 conf 脚本中,那么你可以删除 'nohup'

cmd >>output.txt 2>error.txt &
于 2013-11-07T22:24:28.650 回答