Raspberry pi 中的 Crontab 不是 运行 一个非常简单的脚本

Crontab in Raspberry pi doesn't run a very simple script

我是 Linux 的新手,我在我的 Raspberry Pi 中一直在努力解决这个问题,但没有成功。

首先我在 /home/myfile.sh 中写了一个简单的脚本,如下所示:

#!/bin/bash
clear
echo "hi"

然后我做了 sudo chmod 755 /home/myfile.sh 来授予权限。

最后我修改了 crontab 使用 crontab -e:

# some comments ...
* * * * * /home/myfile.sh

问题:

当我手动 运行 脚本时它工作正常但是当我在我的 crontab 中设置上面的行时,什么也没有发生。我做错了什么?

Cron 作业 return 默认情况下通过电子邮件发送标准输出和标准错误,因此您需要检查那里以进行测试。

在标准的 raspian 发行版中没有电子邮件 client/agent,因此您需要安装它,例如:

sudo aptitude install bsd-mailx

然后您将能够使用命令 mail.

检查本地电子邮件

通常 cron 作业不会 return 任何输出将其全部重定向到日志文件。

尝试将输出重定向到这样的文件:

* * * * * /home/myfile.sh > output_file.txt

你会看到它正在工作。

Cron 作业不会输出到您正在使用的同一终端。


编辑

如果您使用 crontab -e 来安排作业,则您使用的是用户的特定 crontab。因此,您只能写入该用户的主目录(或他有权访问的其他目录)。因此,如果您将 cron 作业修改为:

* * * * * /home/myfile.sh > /home/<username>/output_file.txt

您会看到输出已写入用户主目录下的那个文件。

如果要写入其他目录,建议使用/etc/crontab

中的system-widecrontab

顺便说一下,您可能希望为 cron 作业启用日志记录以跟踪问题。您需要编辑 /etc/rsyslog.conf or /etc/rsyslog.d/50-default.conf 文件并确保取消注释以下行,如果缺少则添加它:

cron.*                         /var/log/cron.log

然后重启rsyslogcron:

sudo service rsyslog restart
sudo service cron restart

现在您可以查看您的命令是否由 cron 运行 执行。

为了展示我是如何设法解决我的问题并希望能帮助他人的,我在这里 post 作为对我自己问题的回答:

我通过使用 系统范围的 crontab (/etc/crontab) 而不是 per user crontab (crontab -e).

为了澄清这一点,

/etc/crontab系统范围 crontab:

# m h dom mon dow user      command
*   *  *   *   *  someuser  echo 'foo'

crontab -e 每个用户 'crontab':

# m h  dom mon dow  command
*   *   *   *   *   echo 'foo'

请注意,在每个用户的 crontab 中没有 'user' 字段。

你可以在 user (crontab -e) 下通过将 PATH 添加到 crontab 文件中来 crontab:

SHELL=/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * /home/pi/command