!调用历史扩展,!!重新执行之前的命令。
cat /lib/systemd/system/motion.service
ExecStartPre=!/bin/mkdir -p /var/log/motion
Run Code Online (Sandbox Code Playgroud)
同样的逻辑,!/bin/mkdir -p /var/log/motion意味着重新执行/bin/mkdir -p /var/log/motion,没有意义。
写成怎么样ExecStartPre=/bin/mkdir -p /var/log/motion?
是什么!意思!/bin/mkdir?
它可以防止同一定义中的任何User=,Group=和设置影响该命令。SupplementaryGroups=*.servicemkdir
显然,服务文件旨在motion以非 root 用户身份启动实际的服务进程(我猜)。但由于该/var/log目录通常只能由 root 写入,因此服务文件首先mkdir -p /var/log/motion以 root 身份运行(然后可能将其分配给运行该服务的用户?),以便为该服务创建一个日志目录(如果该目录尚不存在)。
所以我希望在服务文件中出现这样的模式:
[Service]
User=motion
ExecStartPre=!/bin/mkdir -p /var/log/motion # but this runs as root
ExecStartPre=!/bin/chown motion /var/log/motion # also this
ExecStart=/usr/bin/motion # only this runs as "motion"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |