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

Crontab中Find -exec命令无法执行的问题及解决方法咨询

解决crontab中find命令-exec选项的执行问题

你的问题核心是cron的shell解析规则和交互式shell不同,导致-exec的分号没有正确传递给find命令,同时命令替换和路径问题也可能影响执行。以下是几种可行的解决方法:

方法1:直接修改crontab命令,调整转义与命令替换

将命令中的分号用单引号包裹,同时用$()替代反引号(更可靠的命令替换方式),并指定date命令的绝对路径:

40 12 * * * /bin/find /tmp/zzz -type f -name "$(/bin/date -d '-1 day' '+server.log.%Y-%m-%d')" -exec echo {} ';'

或者对分号进行双重转义(适配cron的解析规则):

40 12 * * * /bin/find /tmp/zzz -type f -name `date -d '-1 day' '+server.log.%Y-%m-%d'` -exec echo {} \\;

方法2:编写独立shell脚本(推荐)

把逻辑写到脚本里,避免cron的shell解析问题,同时便于维护:

  1. 创建脚本文件(比如/usr/local/bin/find_old_log.sh):
#!/bin/bash
# 生成前一天的日志文件名
LOG_FILENAME=$(date -d '-1 day' '+server.log.%Y-%m-%d')
# 执行find命令
/bin/find /tmp/zzz -type f -name "$LOG_FILENAME" -exec echo {} \;
  1. 给脚本添加执行权限:
chmod +x /usr/local/bin/find_old_log.sh
  1. 在crontab中调用脚本:
40 12 * * * /usr/local/bin/find_old_log.sh

额外注意事项

  • cron的PATH环境变量默认很窄,所有命令尽量使用绝对路径(比如/bin/find、/bin/date),避免因找不到命令导致执行失败。
  • 如果你的系统date命令不支持-d选项(比如某些轻量系统的busybox date),可以用date -v -1d '+server.log.%Y-%m-%d'(BSD系统)或者其他方式生成前一天的日期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:00:54