酷徒LOGO

使用systemd服务创建文件


问题:

我试图创建一个systemd服务来自动清除旧文件目录。 如果我要手工做,我会使用一对命令


$/usr/bin/touch -t $(/usr/bin/date -d'-7day' +%Y%m%d%H%M)/tmp/cutoff


$/usr/bin/find/path/to/dir! -newer/tmp/cutoff -exec rm {} ;



前一行实际上在 /tmp 目录中生成了占位符文件。 但是,以下服务定义


[Unit]


Description=Cleanup index cache left behind by bup backup


Type=oneshot



[Service]


ExecStart=/usr/bin/touch -t $(/usr/bin/date -d'-7day' +%%Y%%m%%d%%H%%M)/tmp/cutoff


SyslogIdentifier=%p



无法生成位置占位符


$/usr/bin/touch -t $(/usr/bin/date -d'-7day' +%Y%m%d%H%M)/tmp/cutoff


$ ls -l/tmp/cutoff


-rw-r--r--. 1 user group 0 Mar 20 14:36/tmp/cutoff


$ rm/tmp/cutoff


$ sudo systemctl start cleanup_index_cache


$ ls -l/tmp/cutoff


ls: cannot access '/tmp/cutoff': No such file or directory


$ 


$ sudo systemctl start cleanup.service


$ ls -l/tmp/cutoff



如果使用systemd删除超过某个年龄的文件/目录的方法? 我是否在将 shell 命令转录到systemd指令中缺少什么内容?


回答 1:

systemd不通过 shell 在 ExecStart= 及其亲属中发送命令。 它直接执行它们。所以你不能使用 shell 结构,例如 $()

为什么你要生成一个日期并用它触摸一个文件还不清楚。 find 完全能够在自己的时间内找到超过某个时间的文件。

从手册页中:


 -mtime n


 File's data was last modified n*24 hours ago. See the comments


 for -atime to understand how rounding affects the interpretation


 of file modification times.



那一点解释:


 -atime n


 File was last accessed n*24 hours ago. When find figures out


 how many 24-hour periods ago the file was last accessed, any


 fractional part is ignored, so to match -atime +1, a file has to


 have been accessed at least two days ago.



find 也可以删除自己的文件,不需要调用 rm ( 由于各种原因,这样做可能是一个坏主意) 。


 -delete


 Delete files; true if removal succeeded. If the removal failed,


 an error message is issued. If -delete fails, find's exit sta‐


 tus will be nonzero (when it eventually exits). Use of -delete


 automatically turns on the `-depth' option.



 Warnings: Don't forget that the find command line is evaluated


 as an expression, so putting -delete first will make find try to


 delete everything below the starting points you specified. When


 testing a find command line that you later intend to use with


 -delete, you should explicitly specify -depth in order to avoid


 later surprises. Because -delete implies -depth, you cannot


 usefully use -prune and -delete together.



因此,要删除超过 7天的文件,你可以直接运行 find,无需其他有趣的内容:


/usr/bin/find/directory -mtime +6 -delete




回答 2:

systemd-tmpfiles 是systemd的一个特性,它可以被配置为自动从目录清除旧文件。 不需要每次需要目录清理时需要启动的新服务,可以在 /etc/tmpfiles.d/ 下创建以下内容:


#/etc/tmpfiles.d/cleanup_index_cache.conf


d/path/to/dir - - - 7d



参考:tmpfiles.d ( 5 )systemd-tmpfiles ( 8 )






Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备17041772号-2  |  如果智培  |  酷兔英语  |  帮酷