0

我在下面有这个脚本,我在其中启动了一个 python 程序。
python 程序输出到标准输出/终端。但我希望通过 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"
4

2 回答 2

0

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

在这种情况下,您可以将命令 ( /rpiVent/rpiVentService) 包装到 shell 脚本中,然后在 FreeBSD rc 脚本中调用此 shell 脚本:

创建/rpiVent/run.sh

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

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

于 2015-01-06T10:46:36.713 回答
0

正确的方法可能是使用start_cmd变量“覆盖”启动命令,如下所示:

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

location="/rpiVent"

name="rpiVentService"
rcvar=`set_rcvar`

load_rc_config $name

command="$location/$name"
command_interpreter="/usr/bin/python"

start_cmd=rpivent_cmd

rpivent_cmd()
{
   $command_interpreter $command >$location/$name.log
}

run_rc_command "$1"
于 2022-01-18T11:48:08.343 回答