帮忙看看为什么这段脚本放到 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
3157 次点击
所在节点    Linux
30 条回复
x1596357
2021-05-25 11:42:47 +08:00
常见的问题是 crontab 的环境中 PATH 是很干净的,最好用绝对路径,比如 head 用 /usr/bin/head 代替。然后 ls 是个内置函数,并不是个程序,所以你可以用 /usr/bin/bash -c "ls -rt /root/playground/linux/ | /usr/bin/head -n -10 | /usr/bin/xargs -d '\n' rm -f"代替
aladdindingding
2021-05-25 13:20:37 +08:00
加载一下 PATH
aizya
2021-05-25 13:58:29 +08:00
@x1596357 好像并不是这个问题...
christin
2021-05-25 14:02:48 +08:00
直接把这段命令放到根目录下运行一次看能运行不
est
2021-05-25 14:06:32 +08:00
先做成 run.sh 方便调试。
tusj
2021-05-25 14:21:48 +08:00
要么 head -n 10
guader
2021-05-25 14:32:11 +08:00
目录有权限吗
ksc010
2021-05-25 14:34:03 +08:00
在命令 后面添加 >> /tmp/error.log 2>&1
Beebird
2021-05-25 14:35:56 +08:00
楼主这个是删除最老的 10 个文件啊
Beebird
2021-05-25 14:48:06 +08:00
没有指定工作目录,这样就可以了,虽然不知道楼主到底是要删除 10 个最老的,还是保留 10 个最新的。。。
* * * * * cd /root/playground/linux/ && ls -rt /root/playground/linux/ | head -n -10 | xargs rm -f
Beebird
2021-05-25 14:52:03 +08:00
看了下楼主 head -n -10 是对的 😂 我搞错了
harwck
2021-05-25 15:27:08 +08:00
8 楼为正解
QHKZ
2021-05-25 15:53:12 +08:00
cron 有 log,看看 log 怎么说
hgc81538
2021-05-25 16:41:51 +08:00
rm 要絕對路徑?

* * * * * ls -rt /root/playground/linux/ | head -n -10 | awk '{print "/root/playground/linux/" $0}' | xargs rm -f
neilyoone
2021-05-25 16:47:22 +08:00
* * * * * 分别代表 分 /时 /日 /月 /周

你总要设定一个 crontab 执行的时间周期吧?

比如每分钟执行一次 */1 * * * * CMD
ysc3839
2021-05-25 16:52:35 +08:00
@x1596357
首先 ls 不是内置函数。
https://packages.ubuntu.com/focal/amd64/coreutils/filelist 这里可以看到存在 /bin/ls

其次 cron 本来就会用 shell 来执行,就算 ls 是内置命令,也是没问题的。
https://github.com/mirror/busybox/blob/7de0ab21d939a5a304157f75918d0318a95261a3/miscutils/crond.c#L721
Linys
2021-05-25 16:58:42 +08:00
@neilyoone * * * * * 这个是合法的,就是每分钟一次。。。。
matrix67
2021-05-25 16:59:26 +08:00
justrand
2021-05-25 17:26:52 +08:00
#4 按 4 楼直接先运行一遍命令能不能执行?
aizya
2021-05-25 17:47:48 +08:00
@christin 确实不行, ls -rt /root/playground/linux/ | head -n -10 这部分可以,但是后面删除没有生效.

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

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

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

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

© 2021 V2EX