Проверка установленного менеджера инициализации

Ответить
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Проверка установленного менеджера инициализации

Сообщение ya »

Код: Выделить всё

ps -p 1 -o comm=
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: Проверка установленного менеджера инициализации

Сообщение 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
```

### Заключение

Теперь у вас есть простой демон, работающий на вашей системе.
ya
^-^
Сообщения: 2336
Зарегистрирован: 16 дек 2021, 19:56

Re: Проверка установленного менеджера инициализации

Сообщение 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`. Если у вас возникнут дополнительные вопросы или нужно более подробное объяснение, не стесняйтесь спрашивать!
Ответить