LINUX.ORG.RU

Bash. Скрипт, прерывание.

 , ,


0

2

Ребят, у меня есть скрипт на bash. Как можно сделать так, чтобы при его закрытии и новом открытии он запускался на том же месте где и остановился? Я так понимаю, нужно в tmp создавать отдельный файл? Или можно сделать внутри скрипта?

Как можно сделать так, чтобы при его закрытии и новом открытии он запускался на том же месте где и остановился?

Переписать на питоне, состояние сохранять в файл

anonymous
()

Чтобы не запариваться сильно - разбить задачу на части(в идеале бесконечно малые) и make-ом

all: stepN .all.completed ; ... && touch $@
...
step1: .hello_world.completed ; echo "hello, world!" && touch $@
Не совсем bash, правда

anonymous
()

Если перегрузка системы не предполагается, то «закрывай» его с помощью Ctrl+Z, а «открывай» с помощью команды fg.

Kroz ★★★★★
()

Это всё зависит от того, что скрипт делает.

legolegs ★★★★★
()

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

а в начало скрипта вписываешь чтение ентого файлика и переход по указателю с указанной циферкой.

хотя мож есть и утилиты конститентного выполнения, но не слышал

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от ananas

как-то так, только идея, не проверял

#! /bin/bash

TMPFILE=/tmp/my-pid

# stop main process at exit
trap "kill -STOP $(< $TMPFILE)" EXIT

# code of main process
function main_process
{
    while : ; do
       date > /tmp/my-res
    done
}
export -f main_process

# check if main process exists and try to revive it
ret=1
if [[ -e $TMPFILE ]]; then
    PID=$(< $TMPFILE)
    kill -CONT $PID
    ret=$?
fi

# launch main process
if [[ $ret -ne 0 ]]; then
    bash -c "main_process" &
    echo $! > $TMPFILE    
fi

# main loop
while : ; do
    sleep 0.5
done
ananas ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.