сценарий:
curl -s http://api.ipify.org > ~/ip.txt && [[ -s ~/ip.txt ]] && ip=$(cat ip.txt) && echo $ip > ~/newIP.txt || echo WAN IP is blank: curl, latency or internet issue
# logger -s WAN IP is blank: curl, latency or internet issue
скрипт, запущенный только до:
curl -s http://api.ipify.org > ~/ip.txt && [[ -s ~/ip.txt ]] && ip=$(cat ip.txt)
другая часть проигнорирована, НО когда я вручную sh сценарий от терминала она выполняется правильно.
Есть ли что-то, что я делаю неправильно?
Это мог бы быть вопрос вкуса, но я лично рассматриваю их u > v && w && x > y || z
нечитабельные остроты и особенно un-debugable. Если они работают, они в порядке, но еще они - ЛАВАШ по моему мнению.
В Вашем случае ошибка была ip=$(cat ip.txt)
часть, потому что cronjobs может или не может иметь текущего рабочего набора каталога к $HOME. Предыдущее … > ~/ip.txt
пишет файл в Ваш $HOME, но следующее cat ip.txt
попытки получить доступ к файлу ip.txt
от везде, где каталог cat
был запущен в. Простая фиксация woul для замены cat ip.txt
с cat ~/ip.txt
.
Однако я предлагаю следующее:
#!/usr/bin/env bash
if ip=$(curl -s -f http://api.ipify.org); then
echo "$ip" > ~/newIP.txt
else
echo "WAN IP is blank: curl, latency or internet issue"
fi
Это полагается curl
возвращение плохого значения выхода (! =0), если это не может получить доступ к дать сайту. Если это не так измените код на:
ip=$(curl -s -f http://api.ipify.org);
if [ "$ip" ]; then
…