[systemd-devel] Multiple services using the same core service?

林自均 johnlinp at gmail.com
Mon Jan 15 09:18:37 UTC 2018


Hi folks,

I re-designed my units as follows:

    # sshd-core.service
    [Unit]
    Description=OpenSSH Daemon
    After=network.target

    [Service]
    ExecStart=/usr/bin/sshd -D
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=always

    # sshd-shell.service
    [Unit]
    PropagatesReloadTo=sshd-core.service

    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/config-sshd.sh enable-shell
    ExecStop=/usr/local/bin/config-sshd.sh disable-shell
    ExecReload=/bin/true
    RemainAfterExit=yes
    ExecStartPost=/bin/mkdir -p /var/run/sshd-running
    ExecStartPost=/bin/systemctl reload-or-restart sshd-core.service
    ExecStartPost=/bin/touch /var/run/sshd-running/sshd-shell.service
    ExecStopPost=/bin/rm -f /var/run/sshd-running/sshd-shell.service
    ExecStopPost=/bin/bash -c 'if [ "$(ls /var/run/sshd-running | wc -l)"
== "0" ] ; then /bin/systemctl stop sshd-core.service ; else /bin/systemctl
reload-or-restart sshd-core.service ; fi'

This version doesn't need to sleep 1 second to wait for sshd, so I guess it
makes more sense.

Is there any suggestion on that? Thanks!

John Lin

林自均 <johnlinp at gmail.com> 於 2017年12月26日 週二 上午9:39寫道:

> Hi folks,
>
> I am trying to achieve:
>
>     # systemctl start sshd-shell.service (1)
>     # systemctl start sshd-sftp.service (2)
>     # systemctl stop sshd-shell.service (3)
>     # systemctl stop sshd-sftp.service (4)
>
> Before the command (1), sshd is not running. By typing (1),
> /etc/sshd_config is configured to accept ssh shell connections but no sftp
> connections, and then start sshd. By typing (2), /etc/sshd_config is
> configured to accept sftp connections too, and sshd is reloaded. By typing
> (3), /etc/sshd_config is configured to refuse ssh shell connection, and
> sshd is reloaded again. By typing (4), sshd will be stopped.
>
> Basically, I wrote the following 3 service units:
>
> - sshd-core.service: the original sshd
> - sshd-shell.service: ssh shell
> - sshd-sftp.service: sftp server
>
> The units looks like:
>
>     # sshd-core.service
>     [Unit]
>     Description=OpenSSH Daemon
>     After=network.target
>     StopWhenUnneeded=yes
>     RefuseManualStart=yes
>
>     [Service]
>     ExecStart=/usr/bin/sshd -D
>     ExecReload=/bin/kill -HUP $MAINPID
>     KillMode=process
>     Restart=always
>
>     # sshd-shell.service
>     [Unit]
>     Requires=sshd-core.service
>     After=sshd-core.service
>     PropagatesReloadTo=sshd-core.service
>
>     [Service]
>     Type=oneshot
>     ExecStart=/usr/local/bin/config-sshd.sh enable-shell
>     ExecStop=/usr/local/bin/config-sshd.sh disable-shell
>     ExecReload=/bin/true
>     RemainAfterExit=yes
>     ExecStartPost=/bin/sleep 1
>     ExecStartPost=-/bin/systemctl reload --no-block sshd-core.service
>     ExecStopPost=-/bin/systemctl reload --no-block sshd-core.service
>
> And sshd-sftp.service is similar to sshd-shell.service except the
> ExecStart= and ExecStop= configures sftp.
>
> The current problem is that I don't know if there is a better way to
> achieve this. For example, I have to sleep 1 second before reloading
> sshd-core.service in sshd-shell.service because otherwise sshd didn't setup
> the signal handler for SIGHUP and will terminate itself. Or systemd doesn't
> suggest such use case?
>
> Thanks for any comments.
>
> John
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/systemd-devel/attachments/20180115/2b5bd3fb/attachment.html>


More information about the systemd-devel mailing list