У меня есть тюрьма FreeBSD, в которой я запускаю сервер с помощью команды:
/usr/sbin/daemon /path/to/script.py
В данный момент мне приходится выполнять эту команду каждый раз, когда я перезагружаю машину и запускается джейл. Я хотел бы, чтобы эта команда началась с /etc/rc
. Есть ли простой способ создать сценарий FreeBSD rc для daemon
команды?
ОБНОВЛЕНИЕ: я прочитал эту документацию BSD о скриптах rc , и из этого я создал следующий скрипт /etc/rc.d/pytivo
:
#!/bin/sh
. /etc/rc.subr
name=pytivo
rcvar=pytivo_enable
procname="/usr/local/pytivo/pyTivo.py"
command="/usr/sbin/daemon -u jnet $procname"
load_rc_config $name
run_rc_command "$1"
Это работает , чтобы запустить сценарий питона Я желающих как демон при запуске тюрьмы ... (учитывая pytivo_enable="YES"
в /etc/rc.conf
) , но сценарий гс не знает , если запущен демон (он думает , что это не тогда , когда она есть) и выдает предупреждение, когда я пытаюсь его запустить:
[root@meryl /home/jnet]# /etc/rc.d/pytivo start
[: /usr/sbin/daemon: unexpected operator
Starting pytivo.
[root@meryl /home/jnet]#
Так что это близко , и это работает , но я чувствую, что смогу получить лучшую функциональность, чем эта.
XX_enable="YES"
в /etc/rc.conf, чтобы сделать его автоматическим запуском. Начните с поиска существующих сценариевОтветы:
command
не должен содержать несколько слов. Это причина[
ошибки, которую вы видите. Вы должны установить любые флаги отдельно.Кроме того, вы должны использовать
pytivo_user
для установки запуска UID, а неdaemon -u
. См. Справочную страницу rc.subr (8) для всех этих магических переменных.Кроме того, вы должны сообщить подсистеме rc, что pytivo - это скрипт Python, чтобы он мог найти процесс, когда проверяет, работает ли он.
Наконец, вы должны использовать идиоматические
set_rcvar
дляrcvar
.Примерно так (я не уверен, что это правильный путь Python):
источник
usr/local/pytivo/pyTivo.py
не демонизируется , поэтому без вызова/usr/bin/daemon
я просто запустил команду во время запуска/etc/rc.d/pytivo start
status
иstop
команды!start_cmd
перед вызовомload_rc_config
:start_cmd="/usr/sbin/daemon -u $pytivo_user $command"
Если вам не нужен rc-скрипт, вы можете использовать просто /etc/rc.local.
Для вашего rc-скрипта вам не хватает зависимых комментариев, хотя бы строки
Должно помочь, что он запущен в нужное время.
Вам также может понадобиться определить pid-файл
источник
: /usr/sbin/daemon: unexpected operator
и мой сценарий rc все еще не знает, работает ли сценарий на самом деле.