Message ID | 5278C502.1080100@cn.fujitsu.com |
---|---|
State | New |
Headers | show |
diff --git a/meta/classes/systemd.bbclass b/meta/classes/systemd.bbclass index 3700b2e..1feac06 100644 --- a/meta/classes/systemd.bbclass +++ b/meta/classes/systemd.bbclass @@ -32,7 +32,8 @@ fi if type systemctl >/dev/null 2>/dev/null; then systemctl $OPTS ${SYSTEMD_AUTO_ENABLE} ${SYSTEMD_SERVICE} - if [ -z "$D" -a "${SYSTEMD_AUTO_ENABLE}" = "enable" ]; then + if [ -z "$D" ] && systemctl is-active ${SYSTEMD_SERVICE} &>/dev/null; then + # if service is active, restart it systemctl restart ${SYSTEMD_SERVICE} fi fi --
ping...
Whoops, this fell out of my inbox. Whilst the is-active check now means that the service is restarted on upgrades, if the package is being installed it's now not started if AUTO_ENABLE is set to true. I think the logic should be "$D unset and (auto enable or is-active)" Ross On 19 November 2013 02:26, Li Zhijian <lizhijian@cn.fujitsu.com> wrote: > ping... > > -- > Best regards. > Li Zhijian > > |-----Original Message----- > |From: openembedded-core-bounces@lists.openembedded.org > |[mailto:openembedded-core-bounces@lists.openembedded.org] On Behalf Of > |Li Zhijian > |Sent: Tuesday, November 05, 2013 6:14 PM > |To: Patches and discussions about the oe-core layer > |Subject: [OE-core] [PATCH v2] systemd.bbclass: only restart the service > |when it is active at systemd_postinst > | > |From: Li Zhijian <lizhijian@cn.fujitsu.com> > | > |If systemd_postinst is installed as a delayed package scriptlet (installed > |to /etc/rpm-postints/${PN}) > |which would be executed at the first time of OS startup. And then this > script > |would block when it is > |trying to call systemctl to restart service. > | > |It seems that it is not a good timing to restart service at run-postinsts. > |I test serval services which has supported systemd(uuidd/avahi-daemon), > |all of them > |will block the startup. > | > |Steps to reproduce: > |1) Installed systemd_postinst as a delayed package scriptlet > | i.e. Append Following lines to meta/recipes-core/busybox/busybox.inc > |pkg_postinst_${PN}-syslog () { > | if [ "x$D" != "x" ] ; then > | exit 1 > | fi > |} > |2) build a rootfs > |$ bitbake core-image-minimal > |3) startup this rootfs > | > |OS would block at /etc/rpm-postinsts/busybox-syslog, like follows > |[ ***] A start job is running ro Run pending postinsts > | > |This patch can fix the block problem, and make the service is consistent > |with the original status > | > |Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com> > |--- > | meta/classes/systemd.bbclass | 3 ++- > | 1 files changed, 2 insertions(+), 1 deletions(-) > | > |diff --git a/meta/classes/systemd.bbclass b/meta/classes/systemd.bbclass > |index 3700b2e..1feac06 100644 > |--- a/meta/classes/systemd.bbclass > |+++ b/meta/classes/systemd.bbclass > |@@ -32,7 +32,8 @@ fi > | if type systemctl >/dev/null 2>/dev/null; then > | systemctl $OPTS ${SYSTEMD_AUTO_ENABLE} ${SYSTEMD_SERVICE} > | - if [ -z "$D" -a "${SYSTEMD_AUTO_ENABLE}" = "enable" ]; then > |+ if [ -z "$D" ] && systemctl is-active ${SYSTEMD_SERVICE} > |&>/dev/null; then > |+ # if service is active, restart it > | systemctl restart ${SYSTEMD_SERVICE} > | fi > | fi > |-- > |1.7.1 > | > | > | > | > |_______________________________________________ > |Openembedded-core mailing list > |Openembedded-core@lists.openembedded.org > |http://lists.openembedded.org/mailman/listinfo/openembedded-core > > > > _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.openembedded.org/mailman/listinfo/openembedded-core
On 22 January 2014 17:56, Burton, Ross <ross.burton@intel.com> wrote: > Whoops, this fell out of my inbox. Whilst the is-active check now > means that the service is restarted on upgrades, if the package is > being installed it's now not started if AUTO_ENABLE is set to true. > > I think the logic should be "$D unset and (auto enable or is-active)" Also, before doing systemctl reload, systemd needs to be told to re-load the services with systemctl --system daemon-reload (thanks Koen for pointing this out). Ross