Re: Вот как бы этому вашему systemd объяснить...
Artem Chuprina пишет: > Проэкспериментируй. В документации ничего не сказано на тему того, будет > ли systemd убивать такие процессы по завершении основного. По идее вроде > не должен, а должен только по stop, а вот по жизни... > Тем более что если он завершился, то какие у него, нафиг, потомки? Чьи, > прошу прощения, потомки, если он уже завершился? Другое дело, что в > случае systemd у них своя cgroup, вероятно, и он может проявить над ней > противоестественный интеллект. Как это не сказано. man 5 systemd.kill KillMode как раз про это. -- С уважением, Терешков Евгений. Jabber ID: e...@altlinux.org, evg_k...@jabber.ru
Re: Вот как бы этому вашему systemd объяснить...
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 объяснить...
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 объяснить...
On 10/25/17 13:25, Victor Wagner wrote: >> Не уверен, что правильно понял задачу (недостаточно подробно описаны >> возможные кейзы), но если понял правильно, то: > В результате старта сервиса могут быть порождены процессы-потомки, а > могут быть и не порождены. Поэтому я немножко не уверен, что oneshot > это то, что надо. Насколько я понимаю, oneshot это именно то, что нужно. Если потомок порожден, то (в момент покладания системы) сервис очевидно активен, и его нужно убивать. Если потомок не порожден, то благодаря комбинации oneshot и RemainAfterExit сервис считается активным после нулевого завершения, значит, его тоже нужно убивать. Если ExecStart завершился не с нулем, то жизнь не удалась и убивать нечего.
Re: Вот как бы этому вашему systemd объяснить...
On Wed, 25 Oct 2017 12:56:29 +0300 Alex Kicelewwrote: > > > > Вот что надо туда дописать, чтобы systemd понимал, что если процесс > > vws autostart завершился с нулевым кодом и не оставил ни одного > > потомка, то так и надо, и сервис active, а ExecStop при покладании > > системы надо выполнять? > > > > Не уверен, что правильно понял задачу (недостаточно подробно описаны > возможные кейзы), но если понял правильно, то: В результате старта сервиса могут быть порождены процессы-потомки, а могут быть и не порождены. Поэтому я немножко не уверен, что oneshot это то, что надо. Далее, в процессе работы загруженной системы могут быть запущены процессы, которые с точки зрения systemd не имеют отношения к данному сервису, а с моей - имеют. И команда, запускаемая по ExecStop их корректно завершит. Поэтому команда ExecStop должна выполняться независимо от того были ли ли запущены в результате ExecStart долгоживущие процессы. Но если они были, то обращаться с ними надо как в случае Type=forking > 1) чтобы процесс считался запущенным при завершении ExecStart с В данном случае, наверное, "сервис считался запущенным", а не "процесс". То есть с моей точки зрения это выглядит как "сервис считается запущенным, даже если ни одного рабочего процесса не создано". > нулевым кодом вне зависимости от того, породились потомки, или нет, и > при этом не считался запущенным, если ExecStart вышел с ненулевым > кодом: Type=oneshot > RemainAfterExit=yes > > 2) если процесс в результате 1) считается запущенным, то ему будет > выдан ExecStop >
Re: Вот как бы этому вашему systemd объяснить...
Victor Wagner пишет: > Вот что надо туда дописать, чтобы systemd понимал, что если процесс > vws autostart завершился с нулевым кодом и не оставил ни одного > потомка, то так и надо, и сервис active, а ExecStop при покладании > системы надо выполнять? man 5 systemd.service RemainAfterExit=yes -- С уважением, Терешков Евгений. Jabber ID: e...@altlinux.org, evg_k...@jabber.ru
Re: Вот как бы этому вашему systemd объяснить...
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 объяснить...
Коллеги, есть вот такой 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 при покладании системы надо выполнять?