删除 cron 中的某些文件

删除 cron 中的某些文件

如何在 cron 中定期删除某些文件?

我正在尝试删除 PHP 会话目录中超过 15 分钟的空文件。我尝试了几种方法,但都失败了,并显示不同的错误消息。

4-59/10 *   * * *     root   [ -d /var/lib/php/sessions ] && find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -print0 | xargs -n 200 -r -0 rm

xargs 找不到“rm”。它也找不到“/bin/rm”。

4-59/10 *   * * *     root   [ -d /var/lib/php/sessions ] && find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -exec rm '{}'

缺少 -exec 选项的参数。

4-59/10 *   * * *     root   [ -d /var/lib/php/sessions ] && find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -delete

-delete 选项未知,查找的必须是旧的。

Ubuntu 16.04 还能这样做吗? 第一个提到的版本在 14.04 上运行良好。 如果 cron 可以做到这一点,也许我必须创建一个单独的 shell 脚本文件,并将其名称写入 cron 配置中。 上述所有命令在交互式 bash shell 中都可以正常工作(也许除了最后一个命令)。 只是在 cron 中不行。

答案1

为了避免处理 的cron命令行语法,不要将命令放在 中crontab。为命令编写一个简单的bash包装器,然后从 调用脚本crontab。此包装器将允许您设置环境($PATH)、I/O 重定向、错误处理……

另外,我注意到您正在使用crontabroot特殊格式 ( /etc/crontab, /etc/cron.d/, /etc/cron.daily/, /etc/cron.hourly/, /etc/cron.monthly/, /etc/cron.weekly/) 设置。这是您的意图吗?还是您正在使用sudo crontab?我不建议这样做。

你有:

[ -d /var/lib/php/sessions ] && find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -print0 | xargs -n 200 -r -0 rm

你需要:

[ -d /var/lib/php/sessions ] && /usr/bin/find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -print0 | /usr/bin/xargs -n 200 -r -0 /bin/rm 

你有:

[ -d /var/lib/php/sessions ] && find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -exec rm '{}'  

您需要一个转义的分号(“ \;”)来终止-exec

[ -d /var/lib/php/sessions ] && /usr/bin/find /var/lib/php/sessions/ -type f -cmin +15 -size 0c -exec rm '{}' \;  

find一定很老了”?find --version看起来像:

 $ find --version
find (GNU findutils) 4.7.0-git
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS(FTS_CWDFD) CBO(level=2) 

你运行的是哪个版本的 Ubuntu?find ... -delete已经存在很长时间了。你是吗BusyBox

下面是我用来说明一些问题的脚本cron

(我的环境使用$HOME/bin$HOME/var/log):

在 $HOME/bin/recordenv 中:

#!/bin/bash
# Record the environment that a job enjoys
# $1 is the "type" (cron, at, batch, gui, text) are suggested values.
# $1 is NOT validated. Output goes to ${HOME}/var/log/{env,set,alias}.$1
if [[ "$1" ]] ; then
    ext="$1"
    env | sort >${HOME}/var/log/env.$ext
    set        >${HOME}/var/log/set.$ext
    alias      >${HOME}/var/log/alias.$ext
    /bin/ls -l ${HOME}/var/log/env.$ext ${HOME}/var/log/set.$ext ${HOME}/var/log/alias.$ext
else
    echo "User error."
    exit 1
fi

要使用它,请$HOME/bin/recordenv cron从调用crontab

相关内容