Сценарий Cron при перезагрузке не работает, если я не сплю несколько секунд

Прежде всего, я не уверен, стоит ли размещать его здесь или на форуме, посвященном Ubuntu, но я подумал, что это, вероятно, более общий вопрос.

У меня есть Raspberry Pi 3 с Raspbian Jessie, я написал сценарий для отправки push-уведомления в мою учетную запись 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

Тот же сценарий в Ruby с гемом Washbullet

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}"
    }
)

Отредактированный cron с помощью crontab -e выглядит следующим образом:

@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
задан 28 September 2016 в 18:00
1 ответ

Это может быть и, вероятно, недостаток сетевого доступа, но трудно определить, когда ваш журнал, скорее всего, будет пустым все время. Добавьте -v, чтобы свернуть и перенаправить стандартную ошибку на стандарт out (2>&1), и вы должны иметь лучшее представление о том, что происходит. Также, в зависимости от того, как cron отправляется по почте, вы можете захотеть проверить почтовую катушку пользователей или их домашний каталог на наличие dead.letter.

Если вы хотите сделать это "правильно", вы напишете одноразовый сервис с зависимостью от сети, а не полагаться на cron для этого.

.
1
ответ дан 5 December 2019 в 19:46

Теги

Похожие вопросы