Bash 脚本未从 crontab 创建文件

Bash 脚本未从 crontab 创建文件

我已经尝试了一半的 askubuntu 但仍然没有成功。我得到了以下 shell 脚本:

#!/bin/bash
echo "test" > "/mnt/ssd/test.txt"
echo "test"

以及以下 crontab -e 行:

* * * * * /mnt/ssd/test.sh > /mnt/ssd/cron.log

当我手动向 cron.log 文件添加一行时,每分钟它都会是空的,这告诉我 cron 正在被触发。

我还尝试了以下 cronjob:

* * * * * env > /mnt/ssd/env.output

这给了我以下价值观:

LANGUAGE=nl_NL.UTF-8
HOME=/home/pi
LOGNAME=pi
PATH=/usr/bin:/bin
LANG=nl_NL.UTF-8
SHELL=/bin/sh
LC_ALL=nl_NL.UTF-8
PWD=/home/pi

它再次告诉我 cron 正在运行并且 SHELL 是正确的,对吗?

我也尝试了这个 cron:

* * * * * PATH=/bin:/sbin:/usr/bin:/usr/sbin /mnt/ssd/test.sh > /mnt/ssd/cron.log

这不会向 cron.log 文件写入任何内容,也不会创建 test.txt 文件。

我有点困惑。如果我的 PATH 错误,我是否应该尝试以正确的方式更正它,还是有其他错误?

编辑:感谢@steeldrive,我们发现此脚本所在的驱动器以 noexec 类型挂载。这意味着 bash 文件通常无法执行。在命令前面加上“bash”即可使其正常工作。该命令现在如下所示:

* * * * * bash /mnt/ssd/test.sh > /mnt/ssd/cron.log 2>&1

添加 2>&1 是为了将错误输出到日志文件。

答案1

好的,根据@steeldriver 给出的输入,我们设法找到了解决方案。

bash 脚本位于已通过 noexec 类型挂载的挂载点上。这意味着 bash 文件无法直接执行。使用以下命令找到此文件:

mount | grep ssd

解决方案很简单:在 crontab -e 命令前面添加 bash:

* * * * * bash /mnt/ssd/test.sh > /mnt/ssd/cron.log 2>&1

2>&1 部分也添加到此行,因此错误日志也放在 cron.log 文件中。

相关内容