我有一个将文件存储在目录中的 systemd 服务。我需要确保每次服务启动时目录为空。我认为将
ExecStartPre=+/bin/rm path/to/the/directory/*
添加到 .service 文件即可完成工作,但重新启动服务后,目录中的文件仍然存在。有谁知道我如何在服务启动时清空目录?
参见https://serverfault.com/a/1051433/179897
Systemd 不进行全局扩展,因此它尝试删除名为
path/to/the/directory/*
的单个目录,它的作用就好像 *
是最后一个子目录的名称。
您可以使用以下方法解决此问题:
ExecStartPre=+/bin/bash -c 'rm -rf /path/to/the/directory/*'
我使用
-
而不是 +
并使用完整路径(更多信息请参阅官方文档)。我将 -f
添加到 rm
,以防您同时拥有文件和文件夹。
[Service]
ExecStartPre=-/usr/bin/rm -f /path/to/the/directory/*
我使用以下文件进行了测试(
/etc/systemd/system/mydaemon.service
):
[Unit]
Description=MyDaemon Simple Service
After=network.target
[Service]
Type=simple
ExecStartPre=-/usr/bin/rm /tmp/mydaemon
ExecStart=/usr/bin/ls /tmp
Restart=on-abort
[Install]
WantedBy=multi-user.target
并用以下方法测试了我的服务文件:
# systemctl start mydaemon
# systemctl status mydaemon
# systemctl restart mydaemon
测试您的特定场景:
# touch /tmp/mydaemon
# ls -al /tmp/mydaemon
-rw-r--r--. 1 root root 0 Sep 28 12:38 /tmp/mydaemon
# systemctl restart mydaemon
# ls -al /tmp/mydaemon
ls: cannot access /tmp/mydaemon: No such file or directory