Re: Вот как бы этому вашему systemd объяснить...

2017-10-25 Пенетрантность Евгений Терешков
Artem Chuprina пишет:

> Проэкспериментируй. В документации ничего не сказано на тему того, будет
> ли systemd убивать такие процессы по завершении основного. По идее вроде
> не должен, а должен только по stop, а вот по жизни...
> Тем более что если он завершился, то какие у него, нафиг, потомки? Чьи,
> прошу прощения, потомки, если он уже завершился? Другое дело, что в
> случае systemd у них своя cgroup, вероятно, и он может проявить над ней
> противоестественный интеллект.


Как это не сказано. man 5 systemd.kill
KillMode как раз про это.

-- 
С уважением, Терешков Евгений.
Jabber ID: e...@altlinux.org, evg_k...@jabber.ru

Re: Вот как бы этому вашему systemd объяснить...

2017-10-25 Пенетрантность Artem Chuprina
Victor Wagner -> debian-russian@lists.debian.org  @ Wed, 25 Oct 2017 13:25:52 
+0300:

 >> > Вот что надо туда дописать, чтобы systemd понимал, что если процесс
 >> > vws autostart завершился с нулевым кодом и не оставил ни одного
 >> > потомка, то так и надо, и сервис active, а ExecStop при покладании
 >> > системы надо выполнять?
 >> >   
 >> 
 >> Не уверен, что правильно понял задачу (недостаточно подробно описаны
 >> возможные кейзы), но если понял правильно, то:

 > В результате старта сервиса могут быть порождены процессы-потомки, а
 > могут быть и не порождены. Поэтому я немножко не уверен, что oneshot
 > это то, что надо.

Проэкспериментируй. В документации ничего не сказано на тему того, будет
ли systemd убивать такие процессы по завершении основного. По идее вроде
не должен, а должен только по stop, а вот по жизни...

Тем более что если он завершился, то какие у него, нафиг, потомки? Чьи,
прошу прощения, потомки, если он уже завершился? Другое дело, что в
случае systemd у них своя cgroup, вероятно, и он может проявить над ней
противоестественный интеллект.

В остальном задача явно на oneshot.



Re: Вот как бы этому вашему systemd объяснить...

2017-10-25 Пенетрантность Artem Chuprina
Victor Wagner -> debian-russian@lists.debian.org  @ Wed, 25 Oct 2017 12:07:02 
+0300:

 > Коллеги,

 > есть вот такой service file:

 > [Unit]
 > Description=Virtual Workstation Autostart
 > Documentation=man:vws(1)
 > After=network.target dnsmasq.service
 > [Service]
 > Type=forking
 > ExecStart=/usr/bin/vws autostart
 > ExecStop=/usr/bin/vws shutdown --wait
 > Restart=no
 > [Install]
 > WantedBy=multi-user.target
 > Alias=vws.service


 > Вот что надо туда дописать, чтобы systemd понимал, что если процесс
 > vws autostart завершился с нулевым кодом и не оставил ни одного
 > потомка, то так и надо, и сервис active, а ExecStop при покладании
 > системы надо выполнять?

Про RemainAfterExit тебе уже сказали, а еще Type не forking, а oneshot в
таком раскладе.



Re: Вот как бы этому вашему systemd объяснить...

2017-10-25 Пенетрантность Alex Kicelew
On 10/25/17 13:25, Victor Wagner wrote:
>> Не уверен, что правильно понял задачу (недостаточно подробно описаны
>> возможные кейзы), но если понял правильно, то:
> В результате старта сервиса могут быть порождены процессы-потомки, а
> могут быть и не порождены. Поэтому я немножко не уверен, что oneshot
> это то, что надо.

Насколько я понимаю, oneshot это именно то, что нужно. Если потомок
порожден, то (в момент покладания системы) сервис очевидно активен, и
его нужно убивать. Если потомок не порожден, то благодаря комбинации
oneshot и RemainAfterExit сервис считается активным после нулевого
завершения, значит, его тоже нужно убивать. Если ExecStart завершился не
с нулем, то жизнь не удалась и убивать нечего.



Re: Вот как бы этому вашему systemd объяснить...

2017-10-25 Пенетрантность Victor Wagner
On Wed, 25 Oct 2017 12:56:29 +0300
Alex Kicelew  wrote:


> > 
> > Вот что надо туда дописать, чтобы systemd понимал, что если процесс
> > vws autostart завершился с нулевым кодом и не оставил ни одного
> > потомка, то так и надо, и сервис active, а ExecStop при покладании
> > системы надо выполнять?
> >   
> 
> Не уверен, что правильно понял задачу (недостаточно подробно описаны
> возможные кейзы), но если понял правильно, то:

В результате старта сервиса могут быть порождены процессы-потомки, а
могут быть и не порождены. Поэтому я немножко не уверен, что oneshot
это то, что надо.

Далее, в процессе работы загруженной системы могут быть запущены
процессы, которые с точки зрения systemd не имеют отношения к данному
сервису, а с моей - имеют. И команда, запускаемая по ExecStop их
корректно завершит.

Поэтому команда ExecStop должна выполняться независимо от того были ли
ли запущены в результате ExecStart долгоживущие процессы. Но если они
были, то обращаться с ними надо как в случае Type=forking

 
> 1) чтобы процесс считался запущенным при завершении ExecStart с

В данном случае, наверное, "сервис считался запущенным", а  не
"процесс". То есть с моей точки зрения это выглядит как "сервис
считается запущенным, даже если ни одного рабочего процесса не создано".

> нулевым кодом вне зависимости от того, породились потомки, или нет, и
> при этом не считался запущенным, если ExecStart вышел с ненулевым
> кодом: Type=oneshot
> RemainAfterExit=yes
> 
> 2) если процесс в результате 1) считается запущенным, то ему будет
> выдан ExecStop
> 



Re: Вот как бы этому вашему systemd объяснить...

2017-10-25 Пенетрантность Евгений Терешков
Victor Wagner пишет:

> Вот что надо туда дописать, чтобы systemd понимал, что если процесс
> vws autostart завершился с нулевым кодом и не оставил ни одного
> потомка, то так и надо, и сервис active, а ExecStop при покладании
> системы надо выполнять?

man 5 systemd.service

RemainAfterExit=yes

-- 
С уважением, Терешков Евгений.
Jabber ID: e...@altlinux.org, evg_k...@jabber.ru

Re: Вот как бы этому вашему systemd объяснить...

2017-10-25 Пенетрантность Alex Kicelew
On 10/25/17 12:07, Victor Wagner wrote:
> Коллеги,
> 
> есть вот такой service file:
> 
> [Unit]
> Description=Virtual Workstation Autostart
> Documentation=man:vws(1)
> After=network.target dnsmasq.service
> [Service]
> Type=forking
> ExecStart=/usr/bin/vws autostart
> ExecStop=/usr/bin/vws shutdown --wait
> Restart=no
> [Install]
> WantedBy=multi-user.target
> Alias=vws.service
> 
> 
> Вот что надо туда дописать, чтобы systemd понимал, что если процесс
> vws autostart завершился с нулевым кодом и не оставил ни одного
> потомка, то так и надо, и сервис active, а ExecStop при покладании
> системы надо выполнять?
> 

Не уверен, что правильно понял задачу (недостаточно подробно описаны
возможные кейзы), но если понял правильно, то:

1) чтобы процесс считался запущенным при завершении ExecStart с нулевым
кодом вне зависимости от того, породились потомки, или нет, и при этом
не считался запущенным, если ExecStart вышел с ненулевым кодом:
Type=oneshot
RemainAfterExit=yes

2) если процесс в результате 1) считается запущенным, то ему будет выдан
ExecStop



Вот как бы этому вашему systemd объяснить...

2017-10-25 Пенетрантность Victor Wagner
Коллеги,

есть вот такой service file:

[Unit]
Description=Virtual Workstation Autostart
Documentation=man:vws(1)
After=network.target dnsmasq.service
[Service]
Type=forking
ExecStart=/usr/bin/vws autostart
ExecStop=/usr/bin/vws shutdown --wait
Restart=no
[Install]
WantedBy=multi-user.target
Alias=vws.service


Вот что надо туда дописать, чтобы systemd понимал, что если процесс
vws autostart завершился с нулевым кодом и не оставил ни одного
потомка, то так и надо, и сервис active, а ExecStop при покладании
системы надо выполнять?