You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cron执行shell脚本仅echo生效xargs rm失效,手动sh调用正常如何解决

问题原因排查

  • 非交互环境下sudo执行失败
    你的cron任务已经指定以root用户运行脚本,本身就具备/var/log目录下文件的删除权限,不需要额外加sudo。且cron运行时没有交互终端,若/etc/sudoers中存在Defaults requiretty配置,sudo命令会直接终止执行,导致后续的xargs rm无法运行。
  • 管道逻辑掩盖了前面命令的执行状态
    脚本中rm命令之后直接管道接echo "test",无论前面的删除命令是否执行成功,echo和wall都会正常执行,所以你收到终端广播不代表删除逻辑运行成功。
  • 脚本路径不匹配
    crontab中配置的执行路径是/etc/file.sh,请确认你编写的file.sh确实已移动到/etc目录下,若路径错误只会执行空脚本,自然不会触发删除操作。
  • 通配符匹配结果不足
    如果find /var/log/*.gz匹配到的压缩日志文件数量少于5个,tail -n +6不会输出任何内容,xargs rm自然没有可删除的目标,该情况属于正常逻辑。

修复步骤

  1. 修改file.sh脚本内容,去掉多余的sudo,调整管道逻辑,增加边界判断:
#!/bin/sh
# 先判断匹配到的文件数量是否满足删除条件
FILE_COUNT=$(find /var/log -name "*.gz" | wc -l)
if [ $FILE_COUNT -ge 6 ]; then
    find /var/log -name "*.gz" -printf "%T@ %Tc %p\n" | sort -n | tail -n +6 | xargs rm -f
fi
echo "test" | wall
  1. 确认脚本路径正确,配置对应权限:
mv file.sh /etc/
chmod +x /etc/file.sh
chown root:root /etc/file.sh

内容的提问来源于stack exchange,提问作者Grafik Krystian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:15:04