LINUX.ORG.RU

Помогите с systemd-юнитом [РЕШЕНО]

 


0

1

Итак, есть юнит. Если я его активирую, то система перестает прогружаться.
Вот его содержание:

[Unit]
Description=do somphine

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/bash -c '/opt/scripts/somscript.sh'
ExecStop=/bin/killall somscript.sh

[Install]
WantedBy=multi-user.target 

ЧАДНТ?



Последнее исправление: Kapshibergen (всего исправлений: 1)

Ответ на: комментарий от tolstoevsky

Там обычный цикл с rm -r /tam/*sompfin*
Сам по себе, скрипт запускается. Проблема в том, что при активации юнита, Системд отказывается загружать все что после него.
Если попробовать посмотреть systemd-analize blame пишет мол сначала нужно загрузить систему.
Разве юнит вообще может блокировать работу Системда?

Kapshibergen
() автор топика
Type=oneshot
RemainAfterExit=true

ExecStop=/bin/killall somscript.sh

это не имеет смысла. мало того что последняя строка вообще глупость, но RemainAfterExit предоплагает что в момент остановки юнита скорее всего ничего уже не запущеню, то есть убивать ничего не надо.

eternal_sorrow ★★★★★
()
Ответ на: комментарий от Kapshibergen

Попробуй читать что man выдал, должно помочь.

anonymous
()

Type=oneshot
Там обычный цикл

И чего ты ожидал? oneshot ждёт, когда процесс завершится, чтобы начать запускать оставшиеся юниты. А у тебя процесс не завершается.

gremlin_the_red ★★★★★
()
Ответ на: комментарий от Kapshibergen

Мир дал им systemd, основная фича которого (ради которой всё и затевалось) — это полностью автоматически следить за процессами через цгруппы, но нет, не хотим, хотим жрать говно!

Маны читать не пробовал? systemd прибьёт главный процесс юнита SIGTERM’ом, сам. Если после этого он или какой-то из его потомков (в т. ч. непрямых) останется жив — он прибьёт их SIGKILL’ом.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 2)

Короче,

ЧЯДНТ?

Примерно всё.

Type=oneshot
RemainAfterExit=true

Что поисковик выдал, то и вписал.

Тут нужно не копипастить из поисковика, а (хотя бы пытаться) думать головой. Type=oneshot указывает, что процесс «одноразовый» и живёт ограниченное количество времени, и его завершения нужно подождать. Если у тебя там цикл или ещё что-то — тебе нужно писать Type=simple, т. е. «запустить и пойти дальше по своим делам».

ExecStart=/bin/bash -c ‘/opt/scripts/somscript.sh’

ExecStart=/opt/scripts/somscript.sh. Всё. Зачем /bin/bash -c? Это неоптимально. Сделай на скрипте chmod +x и добавь шебанг, если его там нет.

ExecStop=/bin/killall somscript.sh

Как уже было сказано, это дебилизм. Не говоря уже о том, что killall прибьёт все процессы с этим именем, а не один конкретный. Хочешь прибивать вручную — пиши /bin/kill ${MAINPID}, но вообще-то systemd делает такие вещи автоматически, в этом его суть.

intelfx ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.