我按日期对文件进行排序,以便轻松处理最新文件。我还将一堆日志重定向到/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 的更多信息。