Как запускать скрипты, зависит от времени остановки разницы - PullRequest
1 голос
/ 21 апреля 2019

Привет! Я написал скрипт bash, который автоматически запускает мою программу python каждые 24 часа с обновленными параметрами.После 5-го дня он будет работать с последними установленными параметрами.

Я бы хотел добавить опцию, чтобы, если система была отключена более 6 часов, скрипт запускался с первого дня.Если нет, то это будет продолжаться с последнего состояния.

В настоящее время я пишу только время начала в файл.Однако я не уверен, как я могу прочитать строку времени из этого файла и использовать для вычисления разницы во времени между началом и остановкой.

Я только что попытался записать дату в файл.Однако я не совсем уверен, как читать и использовать это значение в исключительных случаях.

echo "$(date) $(ls -1 | wc -l)" >> starttime.txt
python3 startmeVtest.py 5 2 10
timeout 86400 ./start.sh
sleep 4
python3 startmeVtest.py 10 4 20
timeout 86400 ./start.sh
sleep 4
python3 startmeVtest.py 20 4 40
timeout 86400 ./start.sh
sleep 4
python3 startmeVtest.py 30 8 50
timeout 86400 ./start.sh
sleep 4
python3 startmeVtest.py 50 9 70
./start.sh

Если система была остановлена ​​менее чем за 6 часов, только последний скрипт должен быть выполнен

sleep 4
python3 startmeVtest.py 50 9 70
./start.sh

Ответы [ 2 ]

1 голос
/ 21 апреля 2019

Рассмотрите возможность использования другого (или дополнительного) формата в вашей команде даты, которую вы отправляете в starttime.txt.

Вместо:

echo "$(date) $(ls -1 | wc -l)" >> starttime.txt

Рассмотрим:

echo "$(date +%s) $(ls -1 | wc -l)" >> starttime.txt

При редактировании выше будет выводиться метка времени в эпоху. Время эпохи - это количество секунд с начала эпохи (обычно 1 января 1970 г. по Гринвичу). Целочисленное значение поможет вам сравнить разницу во времени за 6 часов:

Вот небольшой код, чтобы увидеть, если последней записи в starttime.txt шесть часов:

lastrun=$(tail -1 starttime.txt | awk '{print $1}')
currenttime=$(date +%s)
if [ $currenttime -gt $(( lastrun + 6 * 60 * 60 )) ] ; then
  # execute the system has STOP more than 6 hours logic
  :
else
  # execute the system has STOP less than 6 hours log
  :
fi

Однако вы также можете сделать это проще, просто взглянув на отметку времени в starttime.txt и сравнив ее с другим файлом, возраст которого составляет 6 часов. Вот еще один подход с использованием теста -ot. не старше, чем тест. Вот как применить его к вашему варианту использования:

touch -d "6 hours ago" 6hoursago
if [ starttime.txt -ot 6hoursago ] ; then
  # execute the "system has STOP more than 6 hours logic
  :
else
  # execute the "system has STOP less than six hours
  :
fi
0 голосов
/ 21 апреля 2019

Предполагая, что последняя строка файла starttime.txt всегда содержит время начала, сначала вы можете прочитать его и преобразовать в количество секунд (с 1970-01-01 00:00:00 UTC, см. man date) следующим образом.

d1="$(date -d "$(cat starttime.txt | sed -nE '$ s/(.*) [0-9]+$/\1/p')" +%s)"

Теперь вы можете рассчитать разницу во времени между now и d1 в секундах.

diff="$(( $(date +%s) - d1 ))"

Вы можете принять решение с этим значением.

if [[ $diff -gt 21600 ]]; then
    # action if diff is more than 6 hours
else
    # action if diff is less than 6 hours
fi

Может быть, вы можете упростить ваш скрипт, переместив повторяющиеся команды в функцию. Таким образом, окончательный сценарий будет выглядеть примерно так:

run_script()    # reusable functionality
{
    python3 startmeVtest.py $@
    timeout 86400 ./start.sh
    sleep 4
}

# read the last timestamp first
d1="$(date -d "$(cat starttime.txt | sed -nE '$ s/(.*) [0-9]+$/\1/p')" +%s)"
# then save the current timestamp
echo "$(date) $(ls -1 | wc -l)" >> starttime.txt

# check difference with current time
if [[ "$(( $(date +%s) - d1 ))" -gt 21600 ]]; then
    # action if diff is more than 6 hours
    run_script 50 9 70
else
    # action if diff is less than 6 hours
    run_script 5 2 10
    run_script 10 4 20
    run_script 20 4 40
    run_script 30 8 50
fi

# run following always, irrespective of the time diff
./start.sh
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...