繁体   English   中英

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 -e修改了crontab

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

问题:

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

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

我通过使用系统范围的 crontab ( /etc/crontab ) 而不是每个用户的 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 中没有“用户”字段。

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

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

你会看到它正在工作。

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


编辑

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

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

您将看到输出已写入用户主目录下的该文件。

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

顺便说一句,您可能希望为 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 运行。

默认情况下,Cron 作业通过电子邮件返回 stdout 和 stderr,因此您需要在那里检查您的测试。

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

sudo aptitude install bsd-mailx

然后您将能够使用命令mail检查本地电子邮件。

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

您可以通过将PATH添加到 crontab 文件中来在用户(crontab -e) 下执行 crontab:

SHELL=/bin/sh

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM