> "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

Reply via email to