如何删除包含systemd服务文件的目录内容?

问题描述 投票:0回答:2

我有一个将文件存储在目录中的 systemd 服务。我需要确保每次服务启动时目录为空。我认为将

ExecStartPre=+/bin/rm path/to/the/directory/*
添加到 .service 文件即可完成工作,但重新启动服务后,目录中的文件仍然存在。有谁知道我如何在服务启动时清空目录?

systemd
2个回答
0
投票

参见https://serverfault.com/a/1051433/179897

Systemd 不进行全局扩展,因此它尝试删除名为

path/to/the/directory/*
的单个目录,它的作用就好像
*
是最后一个子目录的名称。 您可以使用以下方法解决此问题:

ExecStartPre=+/bin/bash -c 'rm -rf /path/to/the/directory/*'

-1
投票

我使用

-
而不是
+
并使用完整路径(更多信息请参阅官方文档)。我将
-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
© www.soinside.com 2019 - 2024. All rights reserved.