Я создал простой сценарий для выполнения четырех других команд. Мне определили местоположение его в/usr/local/bin/lbrystartup.sh, и это содержит следующее:
#!/bin/bash
#Start web scripts
screen -dmS main /var/www/html/main.sh
screen -dmS loop2 /var/www/html/loop2.sh
screen -dmS blocks /var/www/html/blocks.sh
screen -dmS lbry /var/stratum/run.sh lbry
Когда я запускаю этот скрипт, он хорошо работает. Я заканчиваю с четырьмя экранными экземплярами в списке, и они все работают по мере необходимости.
Затем, я создал сервис для systemd для работы запуска.
coinscripts.service похож на это:
[Unit]
Description = Coinscripts daemon
After network.target = auditd.service
[Service]
type=Simple
ExecStart =/usr/local/bin/lbrystartup.sh
[Install]
WantedBy = multi-user.target
Я включил сервис, и это успешно при этом. Однако, когда я работаю, сервис с "sudo systemctl запускают coinscripts", экранные экземпляры не открываются. Но, когда я использую systemctl состояние coinscripts, я получаю следующее:
● coinscripts.service - Загруженный демон Coinscripts: загруженный (/etc/systemd/system/coinscripts.service; включенный; президент поставщика
Активный: неактивные (мертвые) с тех пор пятница 30.06.2017 21:59:10 PDT; 1 минута 3 с назад Процесс: 1 050 ExecStart =/usr/local/bin/lbrystartup.sh (code=exited, status=0/S Основной PID: 1050 (code=exited, status=0/SUCCESS)30 июня 21:59:10 ubuntu systemd [1]: Запущенный демон Coinscripts.
То же происходит, когда я перезапускаю машину.
Что я делаю неправильно с сервисным сценарием? Я использую Ubuntu 16.04
У Вас все еще есть эта проблема? Это - больше комментария, чем ответ, но у меня, по-видимому, нет достаточного количества точек или безотносительно прокомментировать...
У меня есть несколько связанная проблема о 18,04. Вы находитесь на 16,04?
Я замечаю, что у Вас есть ошибка в Вашем После = раздел. должен быть:
After=network.target auditd.service
Не уверенный Вам действительно нужен auditd.service там, но я думаю, что он должен быть в порядке. Кроме того, Вы имеете:
type=Simple
которым я верю потребностям быть:
Type=simple
Строка ExecStart может также иметь проблему с, равняется знаку (попытайтесь удалить предыдущее пространство), но я не уверен, как systemd обрабатывает пробелы, так, чтобы мог быть прекрасным.
Наконец, я думаю, что можно хотеть, чтобы это было Type=forking, так как Вы называете дочерний процесс на экране, который не выйдет после завершения.
Править:
Я также просто понял, что Вы не используете полные пути в своем сценарии (т.е./usr/bin/program вместо просто программы). Попробуйте это также.
Я также хотел бы добавить предложение для использования tmux вместо экрана. По моему опыту, экран не очень устойчив и часто отказывает, и tmux является намного лучшей реализацией того же сервиса. Команды отличаются хотя, таким образом читайте на тех, если Вы действительно решаете попробовать его.