Скрипт FreeBSD rc с выводом в файл
У меня есть этот скрипт ниже, где я запускаю программу на 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"
2 ответа
Трубопровод с >
это особенность оболочки, а не фактическая часть командной строки. Когда команды задействованы программно, переданные им аргументы не могут содержать директивы оболочки (если родительский процесс не имеет специальной поддержки оболочки, как в Python subprocess.Popen(shell=True)
( док).
Что в этом случае вы можете сделать, это то, что вы можете обернуть свою команду (/rpiVent/rpiVentService
) к сценарию оболочки, затем вызовите этот сценарий оболочки в сценарии FreeBSD rc:
Creat /rpiVent/run.sh
:
#!/bin/sh
/rpiVent/rpiVentservice > /rpiVent/rpiVentService.log
а затем использовать это command
(аргументы не нужны).
Правильный способ сделать это, вероятно, «переопределить» команду запуска, используя
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"