Если вывод команды `ps -p 1 -o comm=` показывает `
runit`, это означает, что ваша система использует `runit` в качестве системы инициализации. `runit` — это легковесная система, которая упрощает управление службами и демонстрациями.
### Создание демона с использованием runit
Чтобы создать своего демона, следуйте этим шагам:
#### 1. Написание кода демона
Например, создадим простой демон на Python, который будет записывать текущее время в лог-файл раз в минуту.
##### Пример демона на Python
```python
#!/usr/bin/env python3
import time
import os
log_file = '/var/log/mydaemon.log'
def run():
while True:
with open(log_file, 'a') as f:
f.write(f"{time.ctime()}\n")
time.sleep(60)
if __name__ == "__main__":
run()
```
##### Сохранение скрипта
Сохраните этот код в файл, например, `mydaemon.py`:
```bash
sudo nano /usr/local/bin/mydaemon.py
```
Не забудьте сделать его исполняемым:
```bash
sudo chmod +x /usr/local/bin/mydaemon.py
```
#### 2. Настройка службы с runit
Для управления процессами в `runit` нужно создать директорию службы.
##### Создание директории службы
Создайте директорию для вашего демона:
```bash
sudo mkdir -p /etc/service/mydaemon
```
##### Создание файла `run`
В этой директории создайте файл `run`, который будет запускать ваш демон:
```bash
sudo nano /etc/service/mydaemon/run
```
Вставьте следующую строку, чтобы указать, как запускать ваш демон:
```bash
#!/bin/sh
exec /usr/bin/python3 /usr/local/bin/mydaemon.py
```
Не забудьте сделать файл `run` исполняемым:
```bash
sudo chmod +x /etc/service/mydaemon/run
```
#### 3. Запуск демона
После создания директории службы и файла `run`, ваш демон будет автоматически запущен `runit`. Чтобы проверить состояние службы, используйте:
```bash
sv status mydaemon
```
#### 4. Остановка и перезапуск демона
Чтобы остановить или перезапустить демон, используйте следующие команды:
- Остановить демон:
```bash
sudo sv down mydaemon
```
- Перезапустить демон:
```bash
sudo sv restart mydaemon
```
### Заключение
Теперь у вас есть простой демон, работающий под управлением `runit`. Вы можете настроить его под свои нужды, расширить функционал кода и регулярно проверять, работает ли он, используя команды `sv`.
На примере samba
логи
лучше не использовать, а установить systemctl
sudo mkdir -p /etc/sv/samba
sudo chmod +x /etc/service/samba/run
Код: Выделить всё
#!/bin/sh
exec chpst -u nobody:nogroup /usr/sbin/smbd --foreground --no-process-group --config=/etc/samba/smb.conf
exec chpst -u nobody:nogroup /usr/sbin/nmbd --foreground --no-process-group --config=/etc/samba/smb.conf
sudo chmod +x /etc/service/samba/finish
Код: Выделить всё
#!/bin/sh
# Попытка корректного завершения Samba
pkill smbd
pkill nmbd
------------------------------------------------
менее приемлимый вариант
sudo mkdir -p /etc/service/smbd
sudo chmod +x /etc/service/smbd/run
Код: Выделить всё
#!/bin/sh
exec /usr/sbin/smbd --foreground --no-process-group
sudo chmod +x /etc/service/smbd/finish
Код: Выделить всё
#!/bin/sh
# Попытка корректного завершения Samba
pkill smbd