首先,我不确定我是否应该将其发布在这里或 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 来实现。