Мне нужно создать сервис systemd, чтобы автоматически запустить некоторый owfs-daemon.

Я могу вручную запустить демон с помощью sudo /opt/owfs/bin/owfs --i2c=ALL:ALL --allow_other /mnt/1wire/ . Тогда есть папки и файлы с разными температурами, созданные в /mnt/1wire . Невозможно запустить демон owfs от имени обычного пользователя.

Теперь я попытался создать какой-нибудь сервис systemd для его автоматического запуска (см. Следующий код).

[Unit]
Description=1-wire service
After=syslog.target
After=network.target

[Service]
Type=simple
ExecStart=/opt/owfs/bin/owfs --i2c=ALL:ALL --allow_other /mnt/1wire/

# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300

[Install]
WantedBy=multi-user.target

Я установил службу, и я также могу запустить ее с помощью sudo systemctl start owfs.service . Но в /mnt/1wire нет файлов, созданных. sudo systemctl status owfs.service показывает следующий вывод.

● owfs.service - 1-wire service
   Loaded: loaded (/lib/systemd/system/owfs.service; enabled)
   Active: inactive (dead) since Sat 2016-02-27 13:11:13 UTC; 20s ago
  Process: 1025 ExecStart=/usr/local/bin/temperature/owfs.sh (code=exited, status=0/SUCCESS)
 Main PID: 1025 (code=exited, status=0/SUCCESS)

Feb 27 13:11:13 raspberrypi systemd[1]: Started 1-wire service.

Я думаю, что сервис не запущен от имени пользователя root. Какие изменения нужно внести в мой сервисный файл, чтобы правильно запустить owfs-daemon?

РЕДАКТИРОВАТЬ: Вот файл службы, который работает с owfs.

[Unit]
Description=1-wire service

[Service]
Type=forking
ExecStart=/opt/owfs/bin/owfs --i2c=ALL:ALL --allow_other /mnt/1wire/

# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300

1 ответ1

2

Я использую следующее:

[Unit]
Description=1-wire filesystem FUSE mount
Documentation=man:owfs(1)

[Service]
Type=forking
ExecStart=/usr/bin/owfs -uall --allow_other /run/owfs
ExecStop=/usr/bin/umount /run/owfs
RuntimeDirectory=owfs

Реальная разница в типе Сервиса: из Руководства:

Если установлено значение разветвления, ожидается, что процесс, настроенный с помощью ExecStart =, будет вызывать fork() как часть своего запуска. Ожидается, что родительский процесс завершится после завершения запуска и настройки всех каналов связи. Ребенок продолжает работать как основной процесс демона. Это поведение традиционных демонов UNIX. Если используется этот параметр, рекомендуется также использовать параметр PIDFile =, чтобы systemd мог определить основной процесс демона. systemd продолжит запуск последующих модулей, как только завершится родительский процесс.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .