Страница 1 из 1
Проверка установленного менеджера инициализации
Добавлено: 01 апр 2025, 17:10
ya
Re: Проверка установленного менеджера инициализации
Добавлено: 01 апр 2025, 17:17
ya
Если менеджер инициализации
init
Создание собственного демона в Linux — это задача, которая может включать несколько шагов, таких как написание самого программного кода, конфигурирование службы, настройка автозапуска и управление ей через систему инициализации. Поскольку вы работаете с Devuan, который использует `sysvinit`, я опишу, как создать демона и как его настроить.
### 1. Написание кода демона
В качестве примера мы создадим простой демон на языке Python. Этот демон будет просто записывать текущее время в лог-файл раз в минуту.
#### Пример демона на Python:
```python
#!/usr/bin/env python3
import time
import os
import sys
import daemon # библиотека, позволяющая создавать демонов
# Определим путь к лог-файлу
log_file = '/var/log/mydaemon.log'
def run():
with open(log_file, 'a') as f:
while True:
# Записываем текущее время в лог-файл
f.write(f"{time.ctime()}\n")
f.flush() # Сбрасываем буфер
time.sleep(60) # Ждём 1 минуту
if __name__ == "__main__":
with daemon.DaemonContext():
run()
```
### 2. Сохранение скрипта
Сохраните этот код в файл, например, `mydaemon.py`:
```bash
sudo nano /usr/local/bin/mydaemon.py
```
Не забудьте сделать его исполняемым:
```bash
sudo chmod +x /usr/local/bin/mydaemon.py
```
### 3. Настройка службы
Теперь создадим скрипт, чтобы управлять вашим демоном с помощью `sysvinit`.
#### Создание файла службы
Создайте файл `/etc/init.d/mydaemon`:
```bash
sudo nano /etc/init.d/mydaemon
```
Вставьте в него следующее:
```bash
#!/bin/sh
### BEGIN INIT INFO
# Provides: mydaemon
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: My custom daemon
### END INIT INFO
DAEMON=/usr/local/bin/mydaemon.py
DAEMON_NAME=mydaemon
PIDFILE=/var/run/$DAEMON_NAME.pid
case "$1" in
start)
echo "Starting $DAEMON_NAME"
start-stop-daemon --start --background --make-pidfile --pidfile $PIDFILE --exec /usr/bin/python3 $DAEMON
;;
stop)
echo "Stopping $DAEMON_NAME"
start-stop-daemon --stop --pidfile $PIDFILE
;;
status)
if [ -f $PIDFILE ]; then
echo "$DAEMON_NAME is running with PID $(cat $PIDFILE)"
else
echo "$DAEMON_NAME is not running"
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
;;
esac
exit 0
```
### 4. Сделайте скрипт исполняемым
```bash
sudo chmod +x /etc/init.d/mydaemon
```
### 5. Добавление службы в автозагрузку
Теперь добавьте вашу службу в автозагрузку:
```bash
sudo update-rc.d mydaemon defaults
```
### 6. Запуск вашего демона
Теперь вы можете запустить, остановить или проверить статус вашего демона:
```bash
sudo service mydaemon start
sudo service mydaemon stop
sudo service mydaemon status
```
### 7. Проверка логов
Чтобы проверить, успешно ли работает ваш демон, вы можете открыть лог-файл:
```bash
sudo cat /var/log/mydaemon.log
```
### Заключение
Теперь у вас есть простой демон, работающий на вашей системе.
Re: Проверка установленного менеджера инициализации
Добавлено: 01 апр 2025, 17:23
ya
Если вывод команды `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`. Если у вас возникнут дополнительные вопросы или нужно более подробное объяснение, не стесняйтесь спрашивать!