Как я могу автоматизировать свой компьютер Linux для выключений (и на предпочтительно) при определенных обстоятельствах?

Хорошо, Так немного фона;

Я использовал Windows Home Server в качестве Резервного Устройства, Медиасервера и Сервера Доли дома в течение некоторого времени. Я решил, что это стоило мне, выделяют сока так очень, вначале добавил "Световые сигналы" дополнение, чтобы гарантировать, что это только работало как и, когда необходимый.

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

Теперь вопрос;

Кто-либо получил какие-либо единые предложения (т.е. с клиентскими частями и для Windows и для Linux и части сервера для сервера Linux), или кто-либо может просто проверить, что я должен буду установить все отдельные биты для этого сам отдельно?

(Инструмент, подобный "SmartPower", но для Linux, был бы большим запуском),

1
задан 08.09.2013, 02:44

4 ответа

К сожалению, Вы не указывали свои конкретные требования, таким образом, трудно знать, в чем точно Вы нуждаетесь.

Однако со сценариями оболочки почти что-либо возможно. У меня есть сценарий оболочки, который завершает работу компьютера, когда-то определенные клиенты (пространство отделилось, список в КЛИЕНТСКОЙ переменной) больше не и определенные процессы онлайн (пространство отделилось, список в переменной ПРОЦЕССОВ) не работают за последними 3 проверками:

 #!/bin/sh

LOGFILE=/var/log/autoshutdown.log
CLIENTS="hanzo twix"
PROCESSES="screen"
CHECK_THRESHOLD=3
CHECK_COUNT_FILE=/tmp/autoshutdown_count

FALSE=1
TRUE=0

function log() {
    typeset message="$1"
    echo "$(date +'%Y-%m-%d %H:%M:%S')  $message" >> $LOGFILE
}

function clientsOnline() {
    typeset flag_online=$FALSE
    for client in $CLIENTS
    do
        if ping -c 1 $client 1>/dev/null 2>/dev/null
        then
            #log "Client $client is online."
            flag_online=$TRUE
        else
            #log "Client $client is offline."
            true                                                                                                         
        fi
    done                                                                                                                 

    return $flag_online                                                                                                  
}                                                                                                                        

function processRunning() {
    typeset process_flag=$FALSE                                                                                          
    for process in $PROCESSES                                                                                            
    do                                                                                                                   
        if ps -e | grep -qs $process                                                                                     
        then                                                                                                             
            #log "Process $process is running."                                                                          
            process_flag=$TRUE
        else                                                                                                             
            #log "Process $process is not running."
            true                                                                                                         
        fi                                                                                                               
    done                                                                                                                 

    return $process_flag
}

function resetShutdownCounter() {
    echo "0" > $CHECK_COUNT_FILE                                                                                         
}                                                                                                                        

function getShutdownCount() {
    if [ -r $CHECK_COUNT_FILE ]
    then
        cat $CHECK_COUNT_FILE | head -n 1
    else
        echo 0
    fi
}

function incrementShutdownCounter() {
    echo $(expr $(getShutdownCount) + 1) > $CHECK_COUNT_FILE
}

if [ $(id -u) -ne 0 ]
then
    echo "This script must be run as root user." >&2
    exit 1
fi

#log "### Starting ###"

if clientsOnline
then
    #log "At least one client is online. Reseting shutdown count."
    resetShutdownCounter
elif processRunning
then
    #log "At least one of the registered processes is running. Reseting shutdown count."
    resetShutdownCounter
else
    incrementShutdownCounter
    log "No registered client online. Shutdown counter incremented. Current value: $(getShutdownCount)"

    if [ $(getShutdownCount) -ge $CHECK_THRESHOLD ]
    then
        log "Shutdown count threshold reached. Shutting down system in 10 seconds."
        rm -f $CHECK_COUNT_FILE
        /sbin/shutdown -h 1
    fi
fi

Все, что необходимо сделать, должно запустить этот скрипт от crontab каждые 5 минут. Затем это завершило бы работу Вашего компьютера в случае, если условия завершения работы выполняются в течение 15 минут подряд.

2
ответ дан 12.12.2019, 10:37

На самом деле это довольно просто.

Для выключения машины Linux, только необходимо выполнить '/sbin/telinit 6' (как корень!) из командной строки или сценария. Это закрывает все процессы организованным способом и выключается через BIOS. Обратите внимание, что это не работает все материнские платы, но в 99% случаев это делает.

Существует много способов автоматизировать это... Я не знаю ни о каких автоматизированных пакетах, но не трудно создать то это самостоятельно. Я предполагаю, что Вы используете сервер и рабочий стол/ноутбук, чтобы продолжить работать. Если, например, Вы хотите, чтобы Ваша система Linux выключилась автоматически после того, как Вы закрываете свой рабочий стол Windows, Вы могли записать сценарий, который проверяет с помощью ping-запросов Вашу машину Windows каждые 5 минут. Если это перестало работать 3 раза подряд, закройте машину. Другая возможность является веб-страницей, только доступной от Вас локальная LAN, которая инициирует (отложенное) завершение работы; Вы просто удостоверяетесь, что к странице обращаются завершение работы Windows. И так далее...

1
ответ дан 12.12.2019, 10:37

Что касается закрытия в определенное время, можно сделать это довольно легко путем помещения записи в/etc/crontab

30 2 * * * базируются/sbin/shutdown-h 0

Это будет завершать работу системы в 2:30 каждый день.

Некоторые BIOS позволяют Вам установить систему для включений в определенное время, это - другая опция помимо следа - на LAN.

0
ответ дан 12.12.2019, 10:37

Другой механизм (для добавления к ответам других) является gnome-power-cmd.sh при использовании Gnome:

gnome-power-cmd.sh {приостанавливают |, завершение работы | в спящем режиме | перезагрузка}

Это, кажется, использует DBUS. Я не знаю, как полезный, который будет, если Вы запланируете на выполнении сервера w/out Gnome все же.

0
ответ дан 12.12.2019, 10:37

Теги

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