Re: Unclear as to why "exec" works but "oneshot" does not

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 14.04.2024 16:48, Laura Smith wrote:
I am running a simple service to tweak SSHD on first boot (the script is at the bottom of this mail). This is on Debian Bookworm incase it makes any difference.

If I configure my service as:

[Unit]
Description=ITS Generate SSH Server Keys
Wants=ssh.service
Before=ssh.service
[Service]
ExecStart=/usr/bin/bash /path/to/script
Type=oneshot
[Install]
WantedBy=multi-user.target

It never completes. Logging into the server console, "dpkg-reconfigure" just seems to sit there in the backround forever and so SSHD never gets restarted/reloaded.

Meanwhile, if I change the [Service] definition to:

[Service]
ExecStart=/usr/bin/bash /path/to/script
RemainAfterExit=true
Type=exec

"dpkg-reconfigure" appears to do its job correctly, and as a result SSHD gets restarted/reloaded, I can login via SSH and everything is great.

I just don't understand why its doing that.


If whatever your script does involves (re-)starting of sshd service, you have deadlock with "oneshot" - sshd service cannot proceed until your service startup completes and your service apparently waits on something that waits on your own service.

With "exec" your service startup completes right away and does not prevent sshd service startup.

Laura

My script:

#!/usr/bin/env bash
set -uo pipefail
HAS_RUN_FLAG="/path/to/my.flag"
if [[ ! -f "${HAS_RUN_FLAG}" ]];then
     sed -i'' 's/^Subsystem\s*sftp/#&/' /etc/ssh/sshd_config
     dpkg-reconfigure openssh-server
     touch "${HAS_RUN_FLAG}"
fi






[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux