Le mercredi 16 janvier 2013 à 16:58 +0000, Colin Guthrie a écrit : > 'Twas brillig, and Frederic Crozat at 16/01/13 16:34 did gyre and gimble: > > Hi, > > > > on openSUSE, we found the need to sometime force "--ignore-dependencies" > > when systemctl is called (usually from other services / initscripts / > > tools started by initscripts and which can cause deadlock). > > > > To handle this in a transparent manner, I'd like to introduce > > SYSTEMCTL_OPTIONS environment variable, which, if set, would cause > > systemctl to append its contents as if it was specified on command line. > > Most common use case for this is using the --no-block and > --ignore-dependancies options. I found a need for this to prevent > deadlocks when certainly early packages (e.g. mandriva_everytime (if you > can remember back that far to your mdv days) which would do various h/w > fu (much of it outdated these days tho') and even start some services. > As this was done early in boot the starting of those services could > block in systemd - hence the need to use --no-block) > > IIRC this is handled in the redhat "initscripts" (used also on Mageia - > dunno about suse...) > > > e.g. see this from /etc/init.d/functions (possibly a bit out of date and > IIRC slightly patched by me for Mageia too (the NO_BLOCK option)): > > systemctl_redirect () { > local s > local prog=${1##*/} > local command=$2 > local options="" > > case "$command" in > start) > s=`gprintf "Starting %s (via systemctl): " $prog` > ;; > stop) > s=`gprintf "Stopping %s (via systemctl): " $prog` > ;; > reload|try-reload) > s=`gprintf "Reloading %s configuration (via systemctl): > " $prog` > ;; > restart|try-restart|condrestart) > s=`gprintf "Restarting %s (via systemctl): " $prog` > ;; > esac > > if [ -n "$SYSTEMCTL_IGNORE_DEPENDENCIES" ] ; then > options="$options --ignore-dependencies" > fi > if [ -n "$SYSTEMCTL_NO_BLOCK" ] ; then > options="$options --no-block"
Yes, we have a similar patch in /etc/rc.status on openSUSE, which is using SYSTEMCTL_OPTIONS as variable name. So far, I haven't found a case where --no-block was needed, only "--ignore-dependencies" was needed (which is why I used a catch-all variable name, just in case "--no-block" would be needed later, so we wouldn't need to release another version of the package shipping /etc/rc.status). But it is no longer enough because we started to migrate some initscripts to systemd unit and our YaST tools have also learned to call systemctl to start / stop services. And because of that, the "workaround" in /etc/rc.status is no longer effective. And YaST team doesn't handle to handle the "SYSTEMCTL_OPTIONS" workaround in their generic service handling code (I can understand that). -- Frederic Crozat <fcro...@suse.com> SUSE _______________________________________________ systemd-devel mailing list systemd-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/systemd-devel