остановка задания фактического времени отправления в требуемое время

Мне понравилось - исполнительная идея. Я использовал его для создания этой функции:

function ff {
    find . -name $1 -exec ls -G -d {} \;
}
3
10.10.2013, 22:47
3 ответа

Я не вижу механизм в at позволить Вам указывать время остановки. Я просто запланировал бы другого at задание в 7:00, которое проверило бы, выполняет ли какой-либо из них в заданиях все еще и уничтожает их.

2
27.01.2020, 21:17

At задания выполняются с помощью интерпретатора оболочки (на Linux, это обычно /bin/sh). Это означает, что любая команда Вы собираетесь работать как at задание может быть прослежено количеством PID оболочки, которая собирается выполнить ту команду. Можно просто поймать этот PID со специальной переменной оболочки $$. Можно сохранить его в файл (одинарные кавычки обязательны для не расширения его в текущей оболочке сессии):

at 'echo $$ > /var/run/my_at_job.pid; your_command; rm /var/run/my_at_jon.pid' | at TIME_SPEC

и позже, в другом at задание, можно уничтожить задание и все его порожденные дочерние процессы (you_command):

if [ -r /var/run/at_job.pid ]; then
  for PID in $(ps --ppid `cat /var/run/at_job.pid` -o pid | sed -e '1d'); do
    kill $PID
  done
fi
2
27.01.2020, 21:17

Вы могли включить тайм-аут в свое задание.

timeout "$(($(date +%s -d '7am') - $(date +%s)))" wget -c http://example.com/wibble

С другой стороны, имейте свое задание, пишут его идентификатор процесса где-нибудь так, чтобы можно было уничтожить его. В задании 2:00:

echo $$ >~/.at.download.pid
wget -c http://example.com/wibble
rm ~/.at.download.pid

В задании 7:00:

if [ -e ~/.at.download.pid ]; then
  kill $(~/.at.download.pid)
  rm ~/.at.download.pid
fi
1
27.01.2020, 21:17

Теги

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