帮忙看看为什么这段脚本放到 crontab 中就运行不了?

2021-05-25 11:36:00 +08:00
 aizya

目的是保存最新的 10 条记录,把多余的文件删除,在命令行中是可以运行的.但是放在 crontab 中就执行不了..

环境是 CentOS7, 麻烦能帮忙指出哪里有问题么?

* * * * * ls -rt /root/playground/linux/ | head -n -10 | xargs rm -f

还试了

* * * * * ls -rt /root/playground/linux/ | head -n -10 | xargs -d '\n' rm -f
3169 次点击
所在节点    Linux
30 条回复
aizya
2021-05-25 17:48:26 +08:00
@justrand 确实不行, ls -rt /root/playground/linux/ | head -n -10 这部分可以,但是后面删除没有生效.
aizya
2021-05-25 17:53:09 +08:00
@hgc81538 正解,问题应该是要加文件的完整路径.
lamesbond
2021-05-25 17:59:11 +08:00
看日志,好像是 /var/spool/mail/用户名
mangoDB
2021-05-25 19:19:45 +08:00
看下`man rm`,其中参数`f`有一段解释「 ignore nonexistent files, never prompt 」。

本应该暴露出来的问题被你隐藏了( doge )。
zjb861107
2021-05-25 19:54:22 +08:00
我建议可以尝试下只用 find 命令
snuglove
2021-05-25 19:57:43 +08:00
施展 cd 大法

* * * * * cd /root/playground/linux/ && ls -rt | head -10 | xargs rm -f

直接 find 查询删除最好
answerwa
2021-05-25 22:49:19 +08:00
看了一下上面的都稍微麻烦了,14 楼还加了一层 awk,试试这个

```bash
* * * * * ls -rt /root/playground/linux/ | head -n -10 | xargs -i rm -f /root/playground/linux/{}
```

> 如果不加,crontab 在执行的时候是从根目录去删除,因为根目录没有这些文件,所以不会报错..
另外补充一下,这里不是因为根目录没有这些文件不会报错,是因为 rm 加了 -f 参数,错误不会打印出来
jinliming2
2021-05-25 23:15:00 +08:00
所以,直接这样呢:

* * * * * rm `ls -rtd /root/playground/linux/* | head -n -10`
aizya
2021-05-26 10:49:40 +08:00
@mangoDB 哈哈,确实. 但是加 f 是为了强制删除, 如果不加应该怎么做?
maxbon
2021-05-27 11:37:46 +08:00
很正常啊,你这路径不全,要写绝对路径,或者提前 cd 到相应目录做操作

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/779058

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX