命令在终端上运行但不在 crontab 上运行

命令在终端上运行但不在 crontab 上运行

我试图在 crontab 上运行以下命令,但出于某种原因,我不知道它没有运行。但是,当我在终端上运行它时,它会运行。

IFS= read -r -d $'\0' line < <(find /path/to/folder/  -maxdepth 1 -printf '\%T@ \%p\0' 2>/dev/null | sort -z -n)
file="${line#* }"

我正尝试用它来查找某条路径上最旧的目录。

有人能帮我改正吗?如果要求不算过分的话,解释一下也会很有帮助!谢谢!

编辑

以下是我所得到的信息crontab -e

*/1 16 * * * /path/to/script/test.sh

这是我的脚本

min_dirs=3

mkdir /path/$(date +\%Y\%m\%d\%H\%M)

[[ $(find /path/ -maxdepth 1 -type d | wc -l) -ge $min_dirs ]] &&
IFS= read -r -d $'\0' line < <(find /path/  -maxdepth 1 -printf '\%T@ \%p\0' 2>/dev/null | sort -z -n)
file="${line#* }"

rm -rf "$file"

我想要做的是当其他目录已经填满时开始删除最旧的目录,因此 min_dirs 变量

答案1

假设现在一切正常,下面是摘要:

cron使用/bin/sh而不是 来执行/bin/bash。我不是 bash 专家,但我认为您的脚本中至少有一个/bin/sh不支持的内容。

#!/bin/bash在脚本顶部添加一行(通常称为“shebang”)表示该脚本应使用该可执行文件执行(它可以不止是 shell,您还可以指定 Python)。这应该可以解决在 下运行 bash 代码的问题/bin/sh

我不知道这是否会给您带来问题,但用反引号(`)包围整个脚本是完全没有必要的。

相关内容