在 Crontab 上安装时简单的 bash 脚本失败

在 Crontab 上安装时简单的 bash 脚本失败

编辑:我的脚本位于$HOME文件夹中。这就是问题的原因。问题末尾有更多详细信息。无论如何,这不是一个重复的问题!

我有一个非常简单的脚本,用于删除一些日志文件。从命令行运行完美。但是,如果我在 crontab 上安装它,偶尔我会得到

/bin/sh: 1: $MyScript.sh: 未找到

我认为这可能与 crontab 配置有关,因此我通过以下方式将其专门安装到 crontab 中供我的用户使用

sudo vi /etc/crontab

不幸的是,我仍然会时不时地收到相同的错误。以下是我的脚本。

#!/bin/sh
NOW=$(date +"%m-%d-%Y-%T")
echo "$NOW Starting deleting of  log files"
find /$PATH_TO_DIR/logs/* -mtime +30 -type f -delete

if [ $? -eq 0 ]
then
 echo "$NOW Successfully deleted files"
else
 echo "$NOW Could not delete files"
fi

任何帮助均感激不尽。

编辑:问题是我的主文件夹被加密了。这就是为什么它只能在我登录到终端时才能间歇性地工作。(然后主文件夹被解密并找到我的脚本)。所以我将脚本移到其他地方,它开始工作了。

答案1

有几个问题:

crontabs(无论是crontab -e还是文件)的/etc/cron.d指定如下:

17 *    * * *   root    /usr/local/bin/script.sh

此示例以 root 身份在每小时的第 17 分钟运行。

但是,您可以放入常规脚本/etc/cron.daily/(或每周、每月、每小时)。注意:不要.在文件名中放入,否则将被跳过。

您的脚本还引用了未定义的变量。这将导致/logs/*使用该路径,因为$PATH_TO_DIR计算结果为空。您可以通过set -u在脚本开头的某个位置运行来修复此问题(免责声明:我不知道非 bash shell 如何处理此问题)。

我还认为我们缺少信息,因为我没有看到任何关于$MyScript

相关内容