- [⬆ вверх]
- AWK.md
- FreeBSD — кратко о нём..md
- GELI Ключ без пароля.md
- IDE под твои задачи.md
- ZELLIJ + KITTY твоё оружие в терминальной войне.md
- ZFS Экспорт и импорт пулов.md
- gpart show и монтирование ext2 ext3 ext4.md
- nmdm.md
- nvim.md
- Где располагать пользовательские скрипты.md
- Давай качайся!.md
- Как запоролить host в traefik.md
- Как настроить rc.d скрипт для demon в jail.md
- Как пробросить $DISPLAY по ssh.md
- Как ставить пакеты из портов, чтобы pgk их видел..md
- Обновление FreeBSD.md
- Отключение загрузки video драйверов.md
- Очистка дисков и создание RAID.md
- Разница между rc.conf и sysctl.conf.md
- Специфично для FreeBSD переменные окружения.md
- Управление звуковыми выходами.md
- Управление кодом возврата в bash.md
- Установить terminfo для Alacritty.md
- Установить описание терминала xterm-kitty.md
===================================================
= 📜 КАК НАСТРОИТЬ RC.D СКРИПТ ДЛЯ DEMON В JAIL =
= С ПРАВИЛЬНЫМ STATUS: ORK-ГАЙД V1 = =================================================== [🏗️] ЦЕЛЬ: Сделать `rc.d`-скрипт для FreeBSD (в том числе в jail), который правильно: - запускает сервис (через `/usr/sbin/daemon`) - пишет `pidfile` - даёт рабочий `service status`
[📦] ПРОБЛЕМА:
``- ⇒ `status` не работает: пишет `not running`, даже если процесс жив [⚔️] СИМПТОМЫ: ```sh service synapse start # → Starting synapse. service synapse status # → synapse is not running. sockstat -l | grep :8008 # → порт слушается cat /var/run/synapse.pid # → PID существует, процесс жив ps -aux | grep $PID # → процесс есть, но status врёт``
[🧠] ПРИЧИНА:
По умолчанию rc.subr
использует:
`basename $command → procname`
Если ты указал:
`command="/usr/sbin/daemon"`
то rc.subr
ищет процесс daemon
, а не python
— и не находит.
[🔧] РЕШЕНИЕ:
Указать правильный procname
, соответствующий реальному дочернему процессу, а не daemon
.
[✅] ПРАВИЛЬНЫЙ СКРИПТ:
#!/bin/sh # # PROVIDE: synapse # REQUIRE: NETWORKING # KEYWORD: shutdown . /etc/rc.subr name="synapse" rcvar="synapse_enable" pidfile="/var/run/${name}.pid" logfile="/var/log/${name}.log" procname="/opt/synapse/bin/python" command="/usr/sbin/daemon" command_args="-p ${pidfile} -o ${logfile} -t ${name} ${procname} -m synapse.app.homeserver --config-path /opt/synapse/homeserver.yaml" load_rc_config $name : ${synapse_enable="NO"} run_rc_command "$1"
[🧪] ПРОВЕРКА:
sysrc synapse_enable=YES service synapse start service synapse status # → synapse is running as pid XXXX service synapse stop
[📂] ПОД КАПОТОМ:
rc.subr
при вызове status
делает:
ps -p $PID -o ucomm= # сравнивает с $procname
→ если не совпадает, пишет not running
, даже если PID жив.
[📛] ЕСЛИ НЕ ПОМОГЛО:
-
Проверь доступность
/var/run/
изнутри jail -
Убедись, что
kill -0 $(cat $pidfile)
работает -
Убедись, что
ps -p $PID
показывает нужный процесс -
В крайнем случае: используй
nohup
,&
,echo $! > $pidfile
вручную безdaemon, но это жопэ с повисшим out и не закрытым service, застопорти к чертям всё.
[🔥] ВЫВОД:
Для любых дочерних процессов (например, Python, Node.js, Go):
-
Если запускаешь через
daemon
— всегда задавайprocname
, соответствующий исполняемому бинарю. -
Это ключ к рабочему
service status
иstop
.
🐗 Живи по уставу орк-хакеров: всё под контролем, всё чётко, без фокусов.
Слава демонам, которых видно!