> "Directly" means *not using wrapper scripts.* You can put command line > arguments in ExecStart.
Is there a way to run a shell script in a systemd which runs this type of command: "eval $DCC_LIBEXEC/dccifd $DCCIFD_ARGS”. The Distributed Checksum Clearinghouses shell scripts end up running this command. I’d rather use their scripts directly instead of having to extract the necessary parts required for a systemd forking type. > On Apr 18, 2023, at 12:02 AM, Mantas Mikulėnas <graw...@gmail.com> wrote: > > On Tue, Apr 18, 2023, 02:59 Bill Steinberg <b...@ponusridge.com > <mailto:b...@ponusridge.com>> wrote: >> >> Hi Barry, >> >> Thanks for the response. Answers inline below. >> >>> On Apr 17, 2023, at 5:09 PM, Barry <ba...@barrys-emacs.org >>> <mailto:ba...@barrys-emacs.org>> wrote: >>> >>> >>> >>>> On 17 Apr 2023, at 19:05, Bill Steinberg <b...@ponusridge.com >>>> <mailto:b...@ponusridge.com>> wrote: >>>> >>>> Hello systemd devel, >>>> >>>> I have a systemd service that I’ve run on prior versions of fedora which >>>> fails to start via systemd on Fedora release 37. It is a oneshot service >>>> that starts the distributed checksum clearing house’s dccifd service via a >>>> shell script. Here is the definition of the service: >>>> >>>> [Unit] >>>> Description=Distributed Checksum Clearinghouses dccifd daemon >>>> After=syslog.target network.target >>>> >>>> [Service] >>>> Type=oneshot >>> >>> Oneshot seems wrong. >>> >>>> RemainAfterExit=yes >>>> ExecStart=/var/dcc/libexec/rcDCC -m dccifd start >>> Does this run a background daemon? >> >> Yes, the rcDCC shell script starts and runs a linux executable, a background >> daemon as you call it. > > > A "background daemon" is just Type=forking. > >> >>> Can you just run that daemon directly? >> >> I could run the shell script directly to start the dccifd executable however >> if the fedora linux server is rebooted I would need to remember to run the >> shell script manually. I’d like the dccifd daemon to start automatically >> when the fedora linux server is started. Isn’t systemd meant for this? > > > "Directly" means *not using wrapper scripts.* You can put command line > arguments in ExecStart. > >> >>> Hopefully that program can be run without demonising. >>> >>> >>>> ExecStop=/var/dcc/libexec/rcDCC -m dccifd stop >>> If it is oneshot it does not need a stop >> >> Is there another type that should be used besides oneshot? I may want to run >> systemctl stop dccifd.service, for example when dccifd is being upgraded to >> a new version. >> >> The dccifd executable is started and stopped using a shell script. It is not >> run directly. One reason is that the shell script contains the arguments >> that are passed to the dccifd linux executable. > > > That's still just Type=forking. > > Make sure the script `exec`s the main process rather than spawning it > underneath as usual. > > But why put those arguments in a shell script? Isn't systemd meant for this? > >> >>> >>>> Restart=no >>>> >>>> [Install] >>>> WantedBy=multi-user.target >>>> >>>> >>>> The error in the journalctl log is: >>>> >>>> systemd[1]: Starting dccifd.service - Distributed Checksum Clearinghouses >>>> dccifddaemon… >>>> systemd[1]: dccifd.service: Main process exited, code=killed, >>>> status=11/SEGV >>>> systemd[1]: dccifd.service: Failed with result 'signal’. >>>> systemd[1]: Failed to start dccifd.service - Distributed Checksum >>>> Clearinghouses dccifddaemon. >>>> >>>> The two scripts in ExecStart and ExecStop run successfully outside of >>>> systemd. Any info as to why systemd fails when executing these scripts >>>> would be appreciated. >>>> >>>> Best, >>>> Bill Steinberg