cron (перезагрузка) и wget (извлечение файлов) не ладят друг с другом - PullRequest
0 голосов
/ 30 мая 2020

Я очень стараюсь заставить это работать, но я просто не могу понять это правильно.

Я получил этот Raspberry Pi, который я хочу загрузить фотографии из ссылки Dropbox в укажите папку c при перезагрузке.

sudo crontab -e

@reboot /home/pi/path/to/dir/with/photos/scripts.sh

скрипты. sh

#!/bin/bash
set -x
cd /home/pi/path/to/dir/with/photos/

# delete all photos and download and convert them again
rm -f /home/pi/crontab.refresh.log || true
sh /home/pi/path/to/dir/with/photos/refreshPhotos.sh > /home/pi/crontab.refresh.log

# convert all photos to bmp (and scale them)
rm -f /home/pi/crontab.convert.log || true
/usr/bin/python2.7 /home/pi/path/to/dir/with/photos/convertPhotos.py > /home/pi/crontab.convert.log

обновить фотографии. sh

#!/bin/bash

# clear the "old" ones
rm -f *.JPG || true
rm -f *.jpg || true

# Get the "fresh" ones
wget -qO- https://www.dropbox.com/sh/AAA/BB -P /home/pi/path/to/dir/with/photos/ | bsdtar -xvf-

wget выглядит немного странно с -qO- и | bsdtar -xvf- - это во избежание попадания их в папку AAA и BBB.

Запуск сценария из

/home/pi/path/to/dir$ bash /with/photos/scripts.sh

работает нормально. НО перезагрузка, похоже, не работает (она удаляет только старые фотографии и не загружает новые.

ЛЮБАЯ помощь, которая решит мою проблему, будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 01 июня 2020

Предложение @ Philippe помогло мне понять, что это связано с тем, что соединение Wi-Fi устанавливается после запуска задания cron.

Это помогло:

скриптов. sh

#!/bin/bash
set -x
cd /home/pi/path/to/dir/with/photos/

# remove all old logs first
rm -f /home/pi/crontab.*.log || true
rm -f /home/pi/crontab.log || true

# delete all photos and download and convert them again
rm -f /home/pi/crontab.refresh.log || true
while ! ping -c1 dropbox.com >> /home/pi/crontab.wifi.log # Need to make sure that the internet connection is there before starting
  do echo "no connection to dropbox yet"
done
sh /home/pi/path/to/dir/with/photos/refreshPhotos.sh >& /home/pi/crontab.refresh.log

Большое спасибо @ Philippe !

0 голосов
/ 31 мая 2020

cron часто запускает базовую оболочку c без каких-либо переменных окружения. Чтобы обеспечить правильную среду, выполните следующие действия и добавьте

$HOME/.profile;

непосредственно перед командой @reboot, поэтому

@reboot $HOME/.profile; /home/pi/path/to/dir/with/photos/scripts.sh

Ответ от: Как мне запустить команду cron с существующими переменными окружения?

...