Проверьте, Зарегистрированы ли Пользователи, Условие Проверки, Завершение работы Автоматически во Время Набора

Сначала ситуация:

У меня есть сервер, которого я хочу завершить работу автоматически ночью (00:00), но я должен удостовериться, что никто не зарегистрирован через ssh во все еще. Если они будут, то я позволю до другого часа для второй попытки завершения работы (01:00), в котором времени сервер понижается несмотря ни на что.

Я полагаю, что могу просто пойти с заданием крона для завершения работы (если нет лучший способ запланировать завершения работы), но не знал бы, как реализовать проверку в первом случае.

Дополнительный:

Есть ли способ знать, использует ли пользователь активно свою долю самбы, и в этом случае, не завершают процедуру завершения работы. Или еще лучше, проверьте, существует ли здоровая сумма Диска ввод-вывод, который также не завершит завершение работы.

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

1
задан 20 August 2011 в 12:05

1 ответ

Можно проверить на активные соединения с:

netstat -an | grep ESTABLISHED | grep ":[portname] " | wc -l
  • Порт 22 для соединений SSH.
  • Порт 445 для соединений самбы.

Поэтому добавьте это к сценарию удара и добавьте сценарий удара к cronjob.

  1. Создание cronjob:

    sudo su
    crontab -e
    

    Вставьте что-то вроде этого для проверки в 24:00 и принудительного завершения работы в 1:00:

    # Check for shutdown system at 24:00 every day
    00 0 * * * /usr/bin/shutdown_script
    # Shutdown at 01:00 every day
    00 1 * * * /usr/bin/shutdown -h now
    
  2. Создайте сценарий (все еще как корень ;)):

    gedit /usr/bin/shutdown_script
    

    и добавьте в командах, на которые Вы хотите проверить:

    #!/bin/bash
    users_ssh=`netstat -an | grep ESTABLISHED | grep ':[445] ' | wc -l`
    users_ssh_alertvalue="0"
    if [ "$users_ssh" -eq "$users_ssh_alertvalue" ]; then
         /sbin/shutdown -h now
    fi 
    

    и, конечно, сделайте это исполняемым файлом.

Можно сделать это более усовершенствованным путем добавления большего количества опций к if все, что необходимо сделать, является находкой корректная команда для нахождения значения, которое Вы хотите проверить. Я еще не нашел хорошую проверку ввода-вывода хотя (iostat и iotop выглядите многообещающими).

править: в то время как поиск проверки ввода-вывода управляет, чтобы я нашел mpstat. Это сообщает о связанной с процессорами статистике (см. man mpstat). Время простоя ЦП от mpstat:

mpstat | grep all | sed -s 's/.* all// ; s/ * / /g' | cut -d ' ' -f10

Таким образом, Вы могли включить это и завершить работу, когда время простоя ЦП выше, чем 98%.

4
ответ дан 3 December 2019 в 07:18

Другие вопросы по тегам:

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