Следуя сообщениям в комментариях, я решил использовать службу systemd вместо создания своего собственного демона. Кажется, это идеальный способ управления фоновыми задачами. Я отредактировал верхний код так, чтобы он имел смысл с ответом.
Systemd - linux
Вам потребуется создать файл .service
и поместить его в каталог демона systemd. Например: /etc/systemd/system/test.service
Затем обновите права доступа к файлу:
sudo chmod 644 /etc/systemd/system/test.service
Для запуска службы:
sudo systemctl start service_name
Сервисный код:
[Unit]
Description=Test service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=username
ExecStart=/usr/bin/env test
[Install]
WantedBy=multi-user.target
Launchctl - macOS
Для macOS нам нужно создать файл .plist
и поместить его в каталог демонов запуска. Например: /Library/LaunchDaemons/test.plist
Следующее обновление прав доступа к файлу:
sudo chown root:wheel /Library/LaunchDaemons/com.test.daemon.plist
Загрузка демона:
launchctl load /Library/LaunchDaemons/com.test.daemon.plist
Запуск демона:
launchctl start /Library/LaunchDaemons/com.test.daemon
Код Plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.test.daemon</string>
<key>ServiceDescription</key>
<string>Test Server</string>
<key>ProgramArguments</key>
<array>
<string>/Users/tom/desktop/test/target/debug/test</string>
</array>
<key>RunAtLoad</key>
<false/>
</dict>
</plist>