В Mon, 29 Jun 2015 08:58:11 -0500
Lesley Kimmel <ljkimme...@hotmail.com> пишет:

> Jonathan;
> 
> Thanks for the background and information. Since you clearly seem to have a 
> grasp of systemd please humour me with a few more questions (some of them 
> slightly ignorant):
> 
> a) Why are PID bad?

PID files as the primary way to track running service are too
unreliable - it is easy for a service to die without removing PID file.
PID file as a mean to track service startup the way systemd does it is
IMHO just fine. Actually it is the only way for a service to announce
its readiness without adding explicit systemd support (Type=notify).

> b) Why are lock files bad?
> c) If a/b are so bad why did they persist for so many years in SysVInit?
> d) Generically, how would you prescribe to use systemd to start Java 
> processes (for Java application servers) that are typically started from a 
> set of relatively complex scripts that are used to set up the environment 
> before launching the Java process? It seems that you are advocating to call, 
> as directly as possible, the target service/daemon. However, some things 
> don't seem so straight-forward.
> 
> Thanks again!
> Lesley Kimmel, RHCE
> Unix/Linux Systems Engineer
> 
> > Date: Sun, 28 Jun 2015 14:29:40 +0100
> > From: j.deboynepollard-newsgro...@ntlworld.com
> > To: systemd-devel@lists.freedesktop.org
> > Subject: Re: [systemd-devel] SysVInit service migration to systemd
> > 
> > Lesley Kimmel:
> > > I've been working with RHEL5/6 for the past several years and have 
> > > developed many init scripts/services which generally use lock files 
> > > and PID files to allow for tracking of the service status. We are 
> > > moving to RHEL7 (systemd) in the near future and I am looking for 
> > > instruction or tutorials on how to effectively migrate these scripts 
> > > to work with systemd.   [...] It looks like I may be able to use the 
> > > 'forking' type with the 'pidfile' parameter to somewhat mimic what the 
> > > scripts to today.
> > 
> > You don't do such migration.  You understand how your daemons are 
> > started, and you write service (and other) units to describe that. You 
> > do not start with the assumption that you migrate straight from one to 
> > the other, particularly if your existing mechanisms involve the 
> > dangerous and rickety things (e.g. PID files) that proper service 
> > management is designed to avoid in the first place, or things such as 
> > "subsystem" lock files which proper service management has no need of by 
> > its very nature.  "Type=forking" specifies a quite specific readiness 
> > protocol that your daemon has to enact, lest it be regarded as failed.  
> > It's isn't a catch-all for anything that might fork in any possible 
> > way.  And service managers know, by dint of simply remembering, what 
> > processes they started and whether they've already started them.
> > 
> > I've been collecting case studies of people who have migrated to systemd 
> > exceedingly badly, and constructed some quite horrendous systems, 
> > because they've done so without either consideration of, or 
> > understanding of, how their sytems actually work.  Here's one candidate 
> > that I have yet to add, because I'm hoping that now they've been told 
> > that they are going wrong they will correct themselves, whose errors are 
> > good to learn from.
> > 
> > There's a computer game called "ARK: Survival Evolved".  It's daemon is 
> > a program named ShooterGameServer.  To run this program continually as a 
> > daemon, someone named Federico Zivolo and a couple of other unidentified 
> > people came up with the somewhat bizarre idea of running it under 
> > screen, and using screen's commands to send its pseudo-terminal an 
> > interrupt character, in order to send a SIGINT to the daemon when it 
> > came time to shut it down.  They wrapped this up in a System 5 rc 
> > script, taking the conventional "start" and "stop" verbs, named 
> > "arkmanager".  Its prevent-multiple-instances system was not lock files, 
> > but grepping the process table.
> > 
> > Wrapped around this they put another System 5 rc script, named 
> > "arkdaemon", which also took the conventional "start" and "stop" verbs, 
> > and which treated the wrapper "arkmanager" script as the daemon, 
> > recording the process ID of the shell interpreter for the "arkmanager" 
> > script in a PID file, as if it were the actual daemon's process ID.  It 
> > also did various other bad things that proper service managers 
> > eliminate, including grepping the process table (again), abusing su to 
> > drop privileges, using arbitrary 5 second sleeps to make the timing 
> > almost work, and (sic) hardwired ECMA-48 SGR sequences to change the 
> > colour of output that isn't going to a terminal in the first place.
> > 
> > Then they wrote a systemd service unit file, "arkdeamon.service" (sic), 
> > that did this:
> > 
> >  > ExecStart=/etc/init.d/arkdaemon start
> >  > ExecStop=/etc/init.d/arkdaemon stop
> >  > Type=forking
> > 
> > A couple of days ago, I pointed out the errors of even starting down 
> > this route to them, and wrote a systemd unit file for them that actually 
> > starts the daemon directly from systemd; no PID files, abuses of su, 
> > racy grepping of the process table, abritrary sleeps, or incorrect 
> > "forking" readiness protocol necessary.  Set the account with User= ; 
> > set the environment with Environment= ; and run the program with 
> > ExecStart=/home/steam/ARK/ShooterGame/Binaries/Linux/ShooterGameServer 
> > plus some options.  Other stuff, like software upgrades, one then builds 
> > on top of the service management layer, not beneath it.  I also pointed 
> > out to them that I had been beaten in this regard by some 4 days by the 
> > (again unfortunately unidentified) people who wrote 
> > http://ark.gamepedia.com/Dedicated_Server_Setup#Automatic_Startup , 
> > whose service unit was pretty much the same as the one that I had 
> > independently written (as one would expect, indeed).
> > 
> > If you understand how your daemon is run in the first place, then you 
> > end up with what I and the gamepedia people did.  If you just think that 
> > you wrap what you already have, using "forking" to imperfectly paper 
> > over the cracks, you oftentimes end up with an utterly horrendous mess.
> > _______________________________________________
> > systemd-devel mailing list
> > systemd-devel@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/systemd-devel
>                                         
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to