重启时 Cron 脚本不起作用,除非我休眠几秒钟

重启时 Cron 脚本不起作用,除非我休眠几秒钟

首先,我不确定我是否应该将其发布在这里或 Ubuntu 特定论坛下,但我认为这可能是一个更通用的问题。

我有一台装有 Raspbian Jessie 的 Raspberry Pi 3,我编写了一个脚本,每次启动时都会向我的 Pushbullet 帐户发送推送以通知我。

首先,我编写了一个 bash 脚本,尝试让它运行几个小时。如果我手动执行该脚本,它会成功,但重启时什么也没发生。因此,我编写了相同的脚本,但改用 Ruby,结果相同;它在手动执行时有效,但在重启时使用 cron 时无效。

我在执行脚本前添加了一个睡眠命令 10 秒,让它工作了。但是,我想知道为什么没有睡眠它就不起作用。可能是 crontab 在我的 RaspberryPi 3 获得互联网访问权限之前执行了我的脚本?

这是我在 BASH 中的脚本

#!/bin/bash
current_time=$(date "+%Y-%m-%d %H:%M:%S")
STATUS=$(curl --header 'Access-Token: '<ACCESS TOKEN>' --header 'Content-Type: application/json' --data-binary '{"body":"RaspberryPi 3 started at '"$current_time"'","title":"RaspberryPi 3 started","type":"note"}' --request POST https://api.pushbullet.com/v2/pushes)
echo $STATUS >> log.log
exit 0

使用 Washbullet gem 编写的 Ruby 脚本

require 'washbullet'

client = Washbullet::Client.new('<ACCESS TOKEN>')
timenow = Time.now.strftime("%Y/%m/%d %H:%M")
client.push_note(
    receiver:    :device,
    params: {
        title: "RPi3 started",
        body: "RaspberryPi 3 started at #{timenow}"
    }
)

使用 crontab -e 编辑的 cron 如下所示:

@reboot /home/pi/bin/pushbullet.sh

或者

@reboot ruby /home/pi/bin/pushbullet.rb

这些 cron 仅在我添加“sleep 10;”时才有效,即:

@reboot sleep 10; /home/pi/bin/pushbullet.sh

感谢您的帮助,

马蒂亚斯

答案1

这可能是由于缺乏网络访问,但很难知道您的日志何时可能一直为空。将 a 添加-v到 curl 并将标准错误重定向到标准输出 ( 2>&1),您应该对正在发生的事情有更好的了解。此外,根据 cron 发送到邮件的方式,您可能需要检查用户的邮件池或他们的主目录中是否存在 dead.letter。

如果您想“正确”地完成此操作,您可以编写一个依赖于网络启动的一次性服务,而不是依赖 cron 来实现。

相关内容