另一个无法理解cron的RPi白痴

时间:2015-04-25 22:56:02

标签: cron raspberry-pi

我是大笨蛋,没有grok cron,请你修复大脑。

在pi主目录中,我输入:

crontab -e

在文件的底部我添加一行:

*/5 * * * * date "+(0 6) %H:%M %Z" >> /home/pi/scripts/scripts.log

根据我在网上喋喋不休地阅读其他地方的说明;我认为系统日期每五分钟将打印到scripts.log。我之后添加了一个空行,保存并退出nano,并收到消息" crontab:安装新的crontab"。

我等了,什么都没发生。我进入了raspi-config,设置了时区,然后重新启动,但这并不重要,因为它应该每5分钟运行一次,而不是在特定时间运行。是的,我在第三次尝试后创建了一个脚本目录......但仍然没有。命令行没有输出,脚本目录中没有输出,没有错误消息。

很抱歉重新讨论以前的内容,但我所阅读的内容都是针对某些特定项目的,我还不知道如何分离出来的信息I& #39;我正在寻找。我只想要一些东西,任何东西,使用cron工作,然后我会考虑下一件事情搞砸了。

我非常感激,还有一个向你买啤酒的空洞承诺。

编辑:感谢您推荐给另一个主题,但现在我感到更加困惑。我应该运行什么剧本?命令必须是某个文件的一部分,而不是直接执行,就好像它们在命令行上输入一样? (我希望这是有道理的。)以env >/tmp/test.sh.dummy开头的行是否应该在带有date命令的脚本文件中,或者是crontab文件的一部分?

编辑2:好的,所以我在网上流了几个小时的RTFM,现在我明白cron只运行脚本。我假设它是一种批处理文件,我正在努力工作,"命令行将在命令行输入并以相同方式执行。

让我们忘记那该死的" date"事情,我只想让这个工作。我已在命令行输入:

echo "This is a test."

这就像我预期的那样奏效。然后我在pi目录的scripts目录中创建了一个shell文件,名为firstscript.sh。内容如下:

#!/bin/bash
echo "This is a test."

在命令行中,我输入了:

sudo chmod +x /home/pi/scripts/firstscript.sh

在cron表格中,我已进入该行:

* */2 * * * /home/pi/scripts/firstscript.sh

......最后带回车。这是在所有注释行之后。文件开头没有#!(hashbang?),所以我没有添加一个。保存此信息,得到了回复crontab: installing new crontab.

如果我理解正确,它应该每两分钟运行一次。等了10分钟。重新启动,等待另一个10.尝试相同,将crontab行中的命令更改为./firstscript.sh。 Bupkus。

原谅这种长篇大论,我只是不清楚知道哪些细节是相关的。

2 个答案:

答案 0 :(得分:1)

我大笨蛋ekspurt,请求我修复自己的大脑。

我只知道问题所在。我以前甚至看过这个,当我再次看到它时,我真的应该认识到这个问题。

引用crontab(5)手册页:

  

命令中的百分号(%),除非使用反斜杠(\)进行转义,   将更改为换行符,以及第一个后的所有数据   %将作为标准输入发送到命令。

%命令的参数中的date字符被cron守护程序拦截,并更改为换行符。这会创建一个无效的命令。你需要改变这个:

*/5 * * * * date "+(0 6) %H:%M %Z" >> /home/pi/scripts/scripts.log

到此:

*/5 * * * * date "+(0 6) \%H:\%M \%Z" >> /home/pi/scripts/scripts.log

它应该有用。

正如我之前在评论中提到的,crontab行中的命令需要是shell脚本。它可以是您可以从shell提示符执行的任何命令,除了它在受限制的环境中运行。但在某些情况下,包括这一个,您必须知道cron将在将命令传递给/bin/sh之前处理命令本身。

使用执行相同操作的shell脚本替换date命令会有效(只要脚本名称不包含任何%个字符),但这不是必需的。

答案 1 :(得分:0)

您可以通过Google执行以下步骤:

  1. 创建一个shell脚本。
  2. 确保脚本在第一行有适当的hashbang。
  3. 标记脚本可执行文件。
  4. 尝试在命令行上执行它。
  5. 如果有效,请将其添加到您的crontab。
  6. <小时/> 编辑:
    我已经测试并确认了OP的发现。我还测试并确认了上面显示的方法。
    OP的方法:
    将命令添加到crontab:
    OP-1
    没有结果:
    OP-2
    上面列出的方法:
    1.创建一个shell脚本。
    2.确保脚本在第一行有适当的hashbang。
    ME-1
    3.标记脚本可执行文件。
    ME-2
    4.尝试在命令行上执行它。 (它有效......)
    5.如果有效,请将其添加到您的crontab中。
    ME-3
    结果如预期:
    ME-4