Re: How to check for other init systems from sysvinit script
On Thu, May 30, 2013 at 02:07:10PM -0700, Steve Langasek wrote:
> On Thu, May 30, 2013 at 10:00:40PM +0100, Ben Hutchings wrote:
> > On Thu, May 30, 2013 at 10:39:55PM +0200, Ondřej Surý wrote:
> > > Practical question: if I were to support systemd .service, upstart
> > > init job and/or OpenRC <whatever> together with standard sysvinit
> > > script, how do I check for currently used init system from sysvinit
> > > script to not start the service for a second time?
>
> > . /lib/lsb/init-functions
>
> > (Which should be near the top of your init script already.)
> > This will automagically invoke systemd or upstart if appropriate.
>
> No, it won't. What it will do is provide a shell function you can call to
> check if init is upstart, and if so, neuter your init script:
>
> if init_is_upstart; then
> exit 1
> fi
>
> Doing this automatically by including /lib/lsb/init-functions would be EBW.
I feel it would be DWIM. It really is what systemd does, but I'm sure
that merely confirms your opinion. ;-)
If I understand you correctly:
- For services without an upstart job, the init script can start or
stop a daemon outside of the control of upstart.
- For services with an upstart job, the init script needs this
explicit check and will fail *without any error message* if upstart
is running. (I seem to recall, now, that upstart does not assume
any relationship between similarly named jobs and init scripts.)
Now I realise we should all really use the 'service' command, but
that really seems like an extremely ungraceful degradation of the
behaviour of directly invoked init scripts.
Ben.
--
Ben Hutchings
We get into the habit of living before acquiring the habit of thinking.
- Albert Camus
Reply to: