Thanks, I will try using forking, setting ExecStart and EnvironmentFile as you 
suggested.

> On Apr 18, 2023, at 1:46 PM, Barry <ba...@barrys-emacs.org> wrote:
> 
> 
> 
>> On 18 Apr 2023, at 14:54, Bill Steinberg <b...@ponusridge.com> wrote:
>> 
>> 
>>> 
>>> "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.
> 
> Yes. You do not need the eval.
> 
> You do need to read the file that sets the env var using EnvironmentFile=.
> Then you can use ExecStart=${DDC_LIB}/ddcifd $DDCIFD_ARGS
> Note the use of {} in only one place.
> 
> Barry
>> 
>>> 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