Предложения о arpwatch
хороши, но если вы не хотите идти по этому пути:
Я предлагаю создать файл, содержащий:
#!/bin/sh
arp -n >> results.txt
(обратите внимание на >>
, иначе вы получите сообщение об ошибке после первого запуска ). Убедитесь, что он исполняемый с помощью:
chmod 755 file
, а затем запустите его из crontab.
What bash script concept am I missing? Threads, maybe?
Управление заданиями. Вы можете запускать процессы в фоновом режиме и осуществлять довольно тонкий -детальный контроль над ними, зная их идентификатор процесса и статус завершения.
Чтобы получить PID фоновой команды, используйте переменную $!
.
Чтобы получить статус завершения фоновой команды, используйте wait()
и укажите ее PID. Обратите внимание: вызовы wait()
будут заблокированы, если команда еще не завершилась . Если эта блокировка является проблемой (, это может быть в вашем случае ), вы можете выполнить проверки с помощьюps
(или другого метода )перед вызовом wait()
, чтобы увидеть, готов ли ваш процесс к сбору урожая, обычно в цикле, где есть сторожевой таймер или какой-либо другой способ установки ограничения на время выполнения задачи.
Рассмотрим следующий шаблон на основе цикла:
complete=0
cycles=0
# Task 1
sleep 200 &
pid=$!
while [[ complete -eq 0 ]]; then
ps -o pid= -p $pid > /dev/null
if [[ $? -ne 0 ]]; then
# Signal complete to logic below
complete=1
break;
fi
# Perform some timeout / cycle check to give up on this task
cycles=$((cycles + 1))
if [[ $cycles -gt 100 ]]; then # whatever, this is just a simple watchdog example
break;
fi
# Optional sleep
sleep 1
done
if [[ $complete -eq 1 ]]; then
# Process the command's exit status
wait $pid
if [[ $? -ne 0 ]]; then
: # handle command failed perhaps
else
: # do other things, assuming exit of 0 is a good thing
fi
else
# Process a command watchdog failure
kill -9 $pid # come what may
fi
Для более сложного управления заданиями вы можете переместить проверку команд и управление циклами в функции bash и значительно очистить этот код.