我是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
中设置上述行时,什么也没发生。我做错了什么?
答案 0 :(得分:6)
尝试将输出重定向到如下文件:
* * * * * /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
然后重新启动rsyslog
和cron
:
sudo service rsyslog restart
sudo service cron restart
现在你看看你的命令是否由cron运行。
答案 1 :(得分:3)
为了展示我如何设法解决我的问题,希望能帮助他人,我在这里发布它作为我自己问题的答案:
我通过使用系统范围的crontab (/etc/crontab
)代替每个用户crontab (crontab -e
)解决了这个问题。
澄清一下,
/etc/crontab
是系统级 crontab。
/etc/crontab
的格式如下:
# m h dom mon dow user command
* * * * * someuser echo 'foo'
crontab -e
每位用户&#39; crontab&#39;。
crontab -e
的格式如下:
# m h dom mon dow command
* * * * * echo 'foo'
请注意,在每个用户的crontab中,没有&#39;用户&#39;字段。
答案 2 :(得分:1)
Cron作业默认通过电子邮件返回stdout和stderr,所以你需要检查那里的测试。
在标准的raspian发行版中,没有电子邮件客户端/代理,因此您需要安装它,例如:
sudo aptitude install bsd-mailx
并且您可以使用命令mail
检查本地电子邮件。
通常,cron作业不会返回任何输出,将所有输出重定向到日志文件。
答案 3 :(得分:0)
您可以通过将PATH
添加到crontab文件中来在用户(crontab -e)下crontab:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * /home/pi/command