创建一个更改 /dev/null 修改时间的 systemd 服务

创建一个更改 /dev/null 修改时间的 systemd 服务

我按日期对文件进行排序,以便轻松处理最新文件。我还将一堆日志重定向到/dev/null我的主目录中,我希望它们在最后显示出来。我尝试为此创建一个 systemd 服务,但不知何故它不起作用:

$ cat /etc/systemd/system/devnull1975.service 
[Unit]
Description=Change /dev/null modification time to 1975
After=display-manager.target

[Service]
Type=oneshot
ExecStart=/usr/bin/touch -c -t 197501010000 /dev/null

[Install]
WantedBy=default.target

如果我手动启动它,并且它在重启时运行,它就可以正常工作。“显示管理器之后”看起来像是/dev/null已经创建的点,但重启后它仍然输出当前日期stat。那么,有人能看出问题是什么吗?

答案1

首先,/dev/null 是一个特殊文件,而不是目录。它的主要目的是处理 stdout 和 stderr 的重定向。当日志重定向到该文件夹​​时,它们不再存在。

一些参考资料,这里

对于主目录中的文件,最好从直接命令切换:/usr/bin/touch -c -t 197501010000 /dev/null

/usr/local/bin/mynewscript.sh

但使用您自己的新文件名。因此,使用您最喜欢的编辑器创建新文件,添加以下内容:(相应地更改名称)

#!/bin/bash

/usr/bin/touch -m -t 197501010000 /home/username/.bzr.log
/usr/bin/touch -m -t 197501010000 /home/username/.xsessions-errors.old
/usr/bin/touch -m -t 197501010000 /home/username/.php_history
/usr/bin/touch -m -t 197501010000 /home/username/.recently-used

在您的文件上设置执行:

chmod 455 /usr/local/mynewscript.sh

接下来更改您的服务文件:/etc/systemd/system/devnull1975.service

[Unit]
Description=Changes modified times on log file locate /home/username/
After=graphical-session.target

[Service]
ExecStart=/bin/sh /usr/local/bin/mynewscript.sh
Type=oneshot

[Install]
WantedBy=multi-user.target
Alias=file-touch.service

使用以下命令验证 .service 文件中未发现任何错误

systemd-analyze verify /etc/systemd/system/devnull1975.service

参考此关联有关 systemd 的更多信息。

相关内容