Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 输出到文件的FreeBSD rc脚本_Python_Freebsd_Rc.d - Fatal编程技术网

Python 输出到文件的FreeBSD rc脚本

Python 输出到文件的FreeBSD rc脚本,python,freebsd,rc.d,Python,Freebsd,Rc.d,下面是我启动python程序的脚本。 python程序输出到stdout/terminal。但是我想通过rc脚本安静地启动程序 我可以完美地启动和停止程序。它也会创建日志文件,但不会填充任何内容。我尝试了很多不同的方法。即使使用守护进程作为启动程序 我的问题在哪里 #!/bin/sh # REQUIRE: DAEMON # KEYWORD: shutdown . /etc/rc.subr location="/rpiVent" name="rpiVentService" rcvar=`set

下面是我启动python程序的脚本。
python程序输出到stdout/terminal。但是我想通过rc脚本安静地启动程序

我可以完美地启动和停止程序。它也会创建日志文件,但不会填充任何内容。我尝试了很多不同的方法。即使使用守护进程作为启动程序

我的问题在哪里

#!/bin/sh
# REQUIRE: DAEMON
# KEYWORD: shutdown
. /etc/rc.subr

location="/rpiVent"

name="rpiVentService"
rcvar=`set_rcvar`
command="$location/$name"
#command_args="> $location/$name.log" // Removed
command_interpreter="/usr/bin/python"

load_rc_config $name
run_rc_command "$1"

带有
的管道是shell的一个功能,而不是命令行的实际部分。当以编程方式涉及命令时,提供给它们的参数不能包含shell指令(除非父进程对shell有特殊支持,如Python
subprocess.Popen(shell=True)
())

在这种情况下,您可以做的是将命令(
/rpiVent/rpiVentService
)包装成一个shell脚本,然后在FreeBSD rc脚本中调用该shell脚本:

创建
/rpiVent/run.sh

 #!/bin/sh
 /rpiVent/rpiVentservice > /rpiVent/rpiVentService.log 

然后使用这是一个
命令(不需要参数)。

问题几乎是一样的,因为在执行上述解决方案时,start命令从不存在(do/etc/rc.d/rpiVent start)在Shell中等待,直到我终止任务。程序应该在后台运行,但输出到日志文件?如果在sh脚本的末尾添加&则它将启动进程,但不会使用/etc/rc.d/rpiVent stop终止进程,如果您希望无头启动程序(这样即使Shell脚本终止,它也会运行)您可以使用
nohup
UNIX命令将进程与正在运行的终端分离:我只想让我的程序作为一个服务工作。通过/etc/rc.d/program start/stop启动/停止。同时将stdout/stderr输出到日志文件。这是在不一起工作的时候。如果我做了一个可以启动和停止的rc脚本。如上面的一个问题是,我无法将任何输出到文件。如果我让它工作以生成日志文件,它会中断启动/停止服务。主停止将无法控制所使用的pid。因为pid与sh脚本关联,而不是与程序/python自身关联。使用守护进程也会这样做。但唯一的选项是-f将stdout/stderr发送到/dev/nu我认为您可以使用UNIX
tee
命令同时拥有stdout/stderr和日志文件。
tee
将stdout/stderr复制到日志文件。此外,脚本应该是这样工作的:如果您的脚本运行子进程(python)脚本被终止,python进程也终止了。感谢所有的帮助。但是我决定直接将日志写入python程序。因此它会写入日志文件。谢谢。