在启动时在/ var / run下创build一个目录

我有一个守护进程,它需要在/var/run拥有自己的目录来为其PID文件提供写入权限给守护进程的用户。

我发现我可以用这些命令创build这个目录:

# mkdir /var/run/mydaemon

然后,我可以将其所有权更改为我希望运行该stream程的用户/组:

# chown myuser:myuser /var/run/mydaemon

但是,只要我重新启动,这个目录将会是GONE! 每次机器启动时如何获得这个目录?

    systemd创build目录有两种select,通常最简单的方法是在服务的单元文件中声明一个RuntimeDirectory

    RuntimeDirectory=, RuntimeDirectoryMode=获取目录名称的列表。 如果设置,则在设备启动时,将会在/run (对于系统服务)或低于$ XDG_RUNTIME_DIR(对于用户服务)下创build一个或多个指定名称的目录,并在设备停止时将其删除。 这些目录将具有在RuntimeDirectoryMode=指定的访问模式,并将由User=Group=指定的用户和组拥有。 使用它来pipe理单元的一个或多个运行时目录,并将其生命周期绑定到守护进程运行时。 指定的目录名称必须是相对的,可能不包含“ / ”,即必须引用简单的目录来创build或删除。 这对非特权守护进程特别有用,因为缺less特权,无法在/运行中创build运行时目录,并确保运行时目录在使用后自动清除。

    或者,对于需要更复杂或不同configuration或生命周期保证的运行时目录,请使用tmpfiles.d并让程序包删除文件/usr/lib/tmpfiles.d/mydaemon.conf

      #Type Path Mode UID GID Age Argument d /run/mydaemon 0755 myuser myuser - - 

    我创build了一个服务,将开始dir:

    vim /etc/systemd/system/mydaemon-helper.service

    /etc/systemd/system/mydaemon-helper.service的内容:

     [Unit] Description=MyDaemon Helper Simple Service After=network.target [Service] Type=simple ExecStartPre=-/usr/bin/mkdir /var/run/mydaemon ExecStart=/usr/bin/chown myuser:myuser /var/run/mydaemon Restart=on-abort [Install] WantedBy=multi-user.target 

    然后我开始了这项服务:

    systemctl start mydaemon-helper

    systemctl status mydaemon-helper

    输出:

     [root@alpha etc]# systemctl status mydaemon-helper.service ● mydaemon-helper.service - MyDaemon Helper Simple Service Loaded: loaded (/etc/systemd/system/mydaemon-helper.service; disabled; vendor preset: disabled) Active: inactive (dead) May 28 20:53:50 alpha systemd[1]: Starting MyDaemon Helper Simple Service... May 28 20:53:50 alpha systemd[1]: Started MyDaemon Helper Simple Service. 

    最后,我告诉系统在启动时加载它:

    systemctl enable mydaemon-helper