крон, обрабатывающий только половину сценария

сценарий:

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 сценарий от терминала она выполняется правильно.

Есть ли что-то, что я делаю неправильно?

0
задан 2 December 2018 в 10:18

1 ответ

Это мог бы быть вопрос вкуса, но я лично рассматриваю их 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
    …
0
ответ дан 27 October 2019 в 00:48

Другие вопросы по тегам:

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