Linux 覆盆子皮中的Crontab不';t运行一个非常简单的脚本

Linux 覆盆子皮中的Crontab不';t运行一个非常简单的脚本,linux,raspberry-pi,crontab,Linux,Raspberry Pi,Crontab,我是Linux新手,在我的Raspberry Pi中为这个问题挣扎了一段时间,但没有成功 首先,我在/home/myfile.sh中编写了一个简单的脚本,如下所示: #!/bin/bash clear echo "hi" # m h dom mon dow user command * * * * * someuser echo 'foo' # m h dom mon dow command * * * * * echo 'foo' 然后

我是Linux新手,在我的Raspberry Pi中为这个问题挣扎了一段时间,但没有成功

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

#!/bin/bash
clear
echo "hi"
# m h dom mon dow user      command
*   *  *   *   *  someuser  echo 'foo'
# m h  dom mon dow  command
*   *   *   *   *   echo 'foo'
然后我执行了
sudo chmod 755/home/myfile.sh
来授予权限

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

# some comments ...
* * * * * /home/myfile.sh
问题:


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

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

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

sudo aptitude install bsd-mailx
然后,您将能够使用命令
mail
检查本地电子邮件


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

尝试将输出重定向到如下文件:

* * * * * /home/myfile.sh > output_file.txt
你会看到它正在工作

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


编辑

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

* * * * * /home/myfile.sh > /home/<username>/output_file.txt
然后重新启动
rsyslog
cron

sudo service rsyslog restart
sudo service cron restart

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

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

我通过使用系统范围的crontab
/etc/crontab
)而不是每个用户的crontab
crontab-e
)解决了这个问题

为了澄清这一点

/etc/crontab
是系统范围内的crontab

/etc/crontab
的格式如下:

#!/bin/bash
clear
echo "hi"
# m h dom mon dow user      command
*   *  *   *   *  someuser  echo 'foo'
# m h  dom mon dow  command
*   *   *   *   *   echo 'foo'
crontab-e
是每个用户“crontab”

crontab-e
的格式如下:

#!/bin/bash
clear
echo "hi"
# m h dom mon dow user      command
*   *  *   *   *  someuser  echo 'foo'
# m h  dom mon dow  command
*   *   *   *   *   echo 'foo'

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

您可以通过在crontab文件中添加
PATH
来在user(crontab-e)下创建crontab:

SHELL=/bin/sh
路径=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
****/home/pi/command

crontab行出错,请看这里。您必须添加执行时间*****不是指每分钟吗?@bdn02我查看了维基百科链接和其他文档,但我的corntab行似乎是正确的,您能详细说明我的代码到底出了什么问题吗?您是对的。问题是你在stdout上写,而stdout并没有显示在你的实际控制台中(看@Sigismondo的答案)。不,我没有,我必须使用
sudo
?我已经看到了在哪里可以使用crontab来调度运行的程序。您的回答是否意味着它只想通过电子邮件发送输出?或者我误解了?我的意思是,给定您的(正确的)crontab,您将得到包含“hi”的输出,以本地电子邮件的形式发送给创建它的用户。您无需采取进一步行动,这是cron jobs的标准行为。您可以在crontab中运行程序,如果不重定向,其输出将通过电子邮件报告。但是作业将无法与您连接的tty(终端会话)进行交互(清除):程序将在独立的批处理会话中运行。tnx我将检查它。我尝试了您的解决方案,但我的txt文件中没有写入任何内容。我所做的是在我的主目录中创建一个txt文件,然后将我的crontab修改为
***/home/myfile.sh>/home/myText.txt
,我猜您不能写入
/home/
目录下的文件,因为只有root用户有权写入
/home
目录。因此,尝试将cron作业行更改为
***/home/myfile.sh>/home//myText.txt
当我打开系统范围的crontab时,我意识到,与常规crontab(默认为空)不同,这里有一些预定义的crontab行,它们似乎一直在工作。所以我在那里插入了crontab行,它成功了。我还将我的sh和txt的目录从主页更改为etc。感谢您的回答。感谢您解释如何启用日志,我在日志文件中看到cron在UTC小时运行,而不是在我的国家/地区小时运行!