Я должен эмулировать Выскочку, "запускаются на остановленном" поведении, в котором запускается сервис B, после обслуживают выполнения к завершению, но в systemd. Как я делаю это?
Я видел ссылки на "After="
и "Before="
пункты в [Unit]
раздел *.service
файл, но они, кажется, заставляют сервис B запускаться после того, как сервис A был запущен. Снова, я должен ожидать, пока сервис A не работал к завершению перед стартовым сервисом B.
Я соединил тривиальный пример для проигрывания с поведением. Я поместил мой *.service
файлы в /etc/systemd/system
, включенный эти два сервиса и затем перезагруженный. Я ожидал видеть first.sh
"... и мы отсутствуем" прежде second.sh
"сон в течение 2 секунд", но я не получил тот результат, как Вы будете видеть ниже.
Я ценю Ваше руководство.
====
Вот мои сервисные файлы, сценарии, которые они вызывают, и вывод journalctl.
Вот "first.service":
[Unit]
Description=First of two services
[Service]
ExecStart=/home/steve/play/systemd/oneAfterTheOther/first.sh
[Install]
WantedBy=multi-user.target
Вот "first.sh":
#!/usr/bin/env bash
nsec=10
echo "sleep for ${nsec} seconds"
sleep ${nsec}
echo "...and we're out"
Вот "second.service":
[Unit]
Description=Second of two services
After=first.service
[Service]
ExecStart=/home/steve/play/systemd/oneAfterTheOther/second.sh
[Install]
WantedBy=multi-user.target
Вот "second.sh":
#!/usr/bin/env bash
nsec=2
echo "sleep for ${nsec} seconds"
sleep ${nsec}
echo "...and we're out"
И здесь, наконец, вывод journalctl:
$ journalctl -u first -u second
-- Logs begin at Tue 2018-09-04 17:50:19 CDT, end at Tue 2018-09-04 17:56:37 CDT
Sep 04 17:50:38 sk-xenial-vm systemd[1]: Started First of two services.
Sep 04 17:50:38 sk-xenial-vm systemd[1]: Started Second of two services.
Sep 04 17:50:40 sk-xenial-vm first.sh[900]: sleep for 10 seconds
Sep 04 17:50:40 sk-xenial-vm second.sh[924]: sleep for 2 seconds
Sep 04 17:50:43 sk-xenial-vm second.sh[924]: ...and we're out
Sep 04 17:50:51 sk-xenial-vm first.sh[900]: ...and we're out
Я натолкнулся на ответ на свой собственный вопрос.
Я читал в systemd.service странице справочника о"Type=
"пункт, и я вижу это, когда я добавляю"Type=oneshot
"к [Service]
раздел моего *.service
файлы, systemd делает то, что я хотел.
Я ожидаю, что мог использовать другой Type=
настройки и получают результаты к моей симпатии, и я также ожидаю, что, вероятно, не должен на самом деле делать second.service
oneshot для получения то, что я хочу; first.service
тот, который я должен видеть конец. Но у меня есть путь к успеху теперь.
Так, для записи вот является работа *.service файлами и выводом journalctl для доказательства его.
Вперед!
====
First.service:
[Unit]
Description=First of two services
[Service]
ExecStart=/home/steve/play/systemd/oneAfterTheOther/first.sh
Type=oneshot
[Install]
WantedBy=multi-user.target
Second.service:
[Unit]
Description=Second of two services
After=first.service
[Service]
ExecStart=/home/steve/play/systemd/oneAfterTheOther/second.sh
Type=oneshot
[Install]
WantedBy=multi-user.target
Journalctl производят:
$ journalctl -u first -u second
-- Logs begin at Wed 2018-09-05 11:46:04 CDT, end at Wed 2018-09-05 11:51:54 CDT
Sep 05 11:46:21 sk-xenial-vm systemd[1]: Starting First of two services...
Sep 05 11:46:22 sk-xenial-vm first.sh[868]: sleep for 10 seconds
Sep 05 11:46:32 sk-xenial-vm first.sh[868]: ...and we're out
Sep 05 11:46:32 sk-xenial-vm systemd[1]: Started First of two services.
Sep 05 11:46:32 sk-xenial-vm systemd[1]: Starting Second of two services...
Sep 05 11:46:32 sk-xenial-vm second.sh[1104]: sleep for 2 seconds
Sep 05 11:46:34 sk-xenial-vm second.sh[1104]: ...and we're out
Sep 05 11:46:34 sk-xenial-vm systemd[1]: Started Second of two services.
Вы могли использовать классический двойной амперсанд:
first.sh && second.sh
В этом примере, second.sh
только выполнится, если first.sh
выполнялся успешно (т.е. без ошибок).