不知道我的 crontab 出了什么问题

不知道我的 crontab 出了什么问题

由于我的一个脚本中存在一些错误,我被迫每 30 分钟删除一次临时文件,直到我弄清楚并调试它。

为了完成它,我编写了一个小型 bash 脚本,每 30 分钟运行一次(tempCleaner)

#!/bin/bash
numberOfFiles=$(find -name php* | wc -l)
echo "$numberOfFiles"
if (("$numberOfFiles" <= "0"))
        then
                echo "Nothing to delete"
                echo "There's nothing to delete, everything is fine $(date)" >> /tmp/scan_log
        else
                echo "Something to delete"
                echo "Oops, there are some files that needs to be deleted $(date)" >> /tmp/scan_log
                sudo rm -vrf php* >> /tmp/deleted_files_log
fi

我已经测试过了(./tempCleaner),现在每 30 分钟运行一次,运行得很好,我使用 cron(sudo crontab -e)并写下了以下内容:(我知道时间,只是为了快速测试一下)

*       *       *       *       *       nice -19 /tmp/tempCleaner >> /tmp/error_log_cron

无论我怎么尝试,它都不起作用。为什么?我做错了什么?我错过了什么?

一些技术信息,服务器负载经常超过 1.0(不确定是否对 cron 有影响)文件位于 /tmp,我要删除的文件与以下组 www-data:www-data 相关 bash 文件(tempCleaner)设置为 +x 并且与 ubuntu:ubuntu 相关

答案1

脚本在您启动它的目录中运行,这几乎肯定是 cron 环境中的其他内容。cd在执行任何其他操作之前,向相关目录添加一条语句。

编辑:

添加cd /tmp应该有效。其他方法可能是引用-name以下选项find

#!/bin/bash 
cd /tmp
echo $(date) >> /tmp/deleted_files
find -name 'php*' -type f | xargs rm -rvf >> /tmp/deleted_files 

还有另一项修改:它可能nice不在您的 cron 环境的路径中。要么直接调用脚本(这在调试时是有意义的),要么将完整路径添加到 nice。

答案2

您可能应该将整个路径放在命令前面,例如 find 和 rm。

/usr/bin/find

/bin/rm

就我而言……

缺口

PS,如果您在脚本中执行 sudo,如果它提示您输入密码,会发生什么?

将脚本添加到 crontab 的 sudo 应该会将 cron 放入 root 权限,并且 rm 之前的 sudo 不是必需的。

答案3

@svenW 所说的是正确的..但是在查找中您应该添加类似 -mmin +10 的内容以确保您不会删除正在使用的文件,这会导致您的请求对用户达到 500 或其他要求。

相关内容