Выполнить команду, когда время работы>= 20 минут
Мне нужно запустить скрипт BASH, когда время работы>= 20 минут (например). Как я могу это сделать?
Пожалуйста, помогите мне создать скрипт для проверки работоспособности системы и проверить, работает ли он более 20 минут - запустите другой скрипт.
Благодарю.
2 ответа
Нет необходимости знать, когда прошли 20 минут. Команда "at" может использоваться для того, чтобы просто сказать системе сделать что-то 20 минут с определенного момента (и этот момент может быть (пере) загрузкой).
В /etc/crontab
положил @reboot {user} /usr/local/bin/script.sh
и сделать /usr/local/bin/script.sh
исполняемый файл. Измените {user} на имя пользователя или "root.
Создайте /usr/local/bin/script.sh
и когда вы положите это в него...
at -f /usr/local/bin/script2.sh now + 20 minutes
/usr/local/bin/script2.sh
будет выполнен через 20 минут после (пере) загрузки. Фактические временные рамки могут немного отличаться (поскольку процесс загрузки, вероятно, уже будет запущен до того, как будет запущен "crontab". Просто пример, но это общий метод создания такого события.
/usr/local/bin/script2.sh
может использоваться для добавления большего количества строк с аналогичными начальными точками (40 минут после перезагрузки и т. д.)
Это переживет перезагрузку! Таким образом, 5 перезагрузок в течение 20 минут = 5 раз выполнения. Хммм... оставив это здесь, хотя.
Другой подход:
Если вам нужно сделать это из самого скрипта, вы также можете создать переменную для включения в скрипт. 1-й простой пример:
$uptime
16:11:31 up 1 day, 7:35, 2 users, load average: 0,10, 0,07, 0,06
~/tmp$ more test
uptime
~/tmp$ more test2
minutes=20;
at -f test now + $minutes minutes
И выполнение ./test2
покажет
warning: commands will be executed using /bin/sh
job 7 at Tue Oct 20 16:29:00 2015
Теперь все, что вам нужно сделать, это заменить "минуты" на переменную, например, на "uptime".
Это пример получения времени работы в минутах в переменной "minutes":
minutes=`awk '{print $0/60;}' /proc/uptime`;
И это способ сделать его условным:
#!/bin/bash
minutes=`awk '{print $0/60;}' /proc/uptime`;
if [ $(echo "$minutes > 20" | bc) -ne 0 ]
then
at -f test now + 20 minutes
fi
- Если минут больше 20, выполните скрипт через 20 минут.
Используя чистый bash:
#!/bin/bash
read -d. seconds < /proc/uptime
if (( $seconds > 20*60 ))
then
at -f test now + 20 minutes
fi
Это должно начать вас.
Чтобы запустить скрипт через 20 минут после загрузки, поместите в /etc/rc.local
:
nohup your-script >/dev/null 2>&1 &
где your-script
имеет sleep 1200
в начале сценария.
Или создать upstart
задание или укажите команду @reboot cron или настройте "Startup Applications" и т. д., в зависимости от того, что является наиболее подходящим в вашем случае, см. Как запускать сценарии при запуске?
Чтобы запустить один сценарий, если время безотказной работы превышает 20 минут, а другой - в bash:
read -d. uptime < /proc/uptime
if (( uptime > 1200 ))
then
one_script
else
another_script
fi