Автоматически перезагрузка, если никакое соединение Wi-Fi в течение определенного времени

Разрешение другому пользователю соединиться с Вашим X-сервером означает, что он видит Ваш экран, посмотрите то, что Вы вводите (как пароли), уничтожаете свои приложения (путем завершения их соединения с X-сервером) и таким образом регистрируете Вас, если он уничтожает Ваш менеджер окон, соблазните Вас с поддельными окнами... Имея это в виду, легко понять, почему это не позволяется по умолчанию.

Для предоставления другого пользовательского доступа к X-серверу можно или дать ему код доступа для сервера (см. вывод xauth list "$DISPLAY" или если другой пользователь локален, выполняется xhost +si:localuser:myuser

13
07.07.2014, 12:12
4 ответа

По сути, это ответ Уорика, только с пошаговыми инструкциями.


  1. Создайте следующий скрипт оболочки в вашей домашней папке:

    check_inet.sh

    #!/bin/bash
    
    TMP_FILE=/tmp/inet_up
    
    # Отредактируй эту функцию, если ты хочешь сделать что-то кроме перезагрузки.
    no_inet_action() {
     выключение -r +1 "Без интернета".
    }
    
    если ping -c5 google.com; тогда
     эхо 1 > $TMP_FILE
    другое
     [[ `cat $TMP_FILE` == 0 ]] && no_inet_action || echo 0 > $TMP_FILE
    
    
  2. Измените разрешения так, чтобы оно было исполняемым

     $ chmod +x check_inet.sh
    
  3. Редактируйте /etc/crontab, используя sudo, и добавьте следующую строку (замените yourname на ваше настоящее имя пользователя):

    */30 * * * * * /home/yourname/check_inet.sh
    
10
27.01.2020, 19:53

Ссылка из: Вики Сохранение и выход

Для сохранения внесенных изменений нажмите Ctrl + O . Для выхода из nano введите Ctrl + X . Если вы попросите nano выйти из измененного файла, он попросит вас сохранить его. Просто нажмите n в случае отказа или y в случае отказа. После этого появится запрос на ввод имени файла. Просто введите его и нажмите Enter .

Если вы случайно подтвердили, что хотите сохранить файл, но это не так, вы всегда можете отменить операцию, нажав Ctrl + C при запросе имени файла.

-121--87919-

В соответствии с выводом strace , и я понятия не имею о причине, префикс функции open () имя файла с /proc/:

open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 4
fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
getdents64(4, /* 21 entries */, 32768) = 664
getgid32() = 0
stat64("/proc/index.php", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
stat64("/proc/.svn", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
stat64("/proc/init-dist.php", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
stat64("/proc/landing-page.html", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
[...]
stat64("/proc/js", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
stat64("/proc/extras", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getgid32() = 0
stat64("/proc/sitemaps", 0xbfc53bd0) = -1 ENOENT (No such file or directory)
getdents64(4, /* 0 entries */, 32768) = 0
-121--51070-

Сценарий будет тестировать соединение WIFI, возможно, используя ping , и записывать результат в файл в/tmp - 1 для подключения существует, 0 если нет. Последующие итерации сценария проверят этот файл, и если он был 0, а соединение WIFI все еще было неисправным, выполните команду init 6 .

5
27.01.2020, 19:53

Я думаю, решение hololeap работает.

Мое решение каждые N минут (в зависимости от того, как вы настроили crontab) проверяет работающее сетевое соединение. Если проверка не удалась, я отслеживаю сбой. Когда количество сбоев> 5 Я пытаюсь перезапустить Wi-Fi (вы также можете перезагрузить Raspberry, если перезагрузка Wi-Fi не удалась, проверьте комментарии).

Вот репозиторий GitHub, всегда содержащий последнюю версию скрипта: https://github.com/ltpitt/bash-network-repair-automation

Вот, согласно общему мнению stackexchange policy (все ответы не должны содержать только ссылки), а также файл network_check.sh, скопируйте и вставьте его в любую понравившуюся папку, инструкции по установке находятся в комментариях к скрипту.

#!/bin/bash
# Author:
# twitter.com/pitto
#
# HOW TO INSTALL:
#
# 1) Install ifupdown and fping with the following command:
# sudo apt-get install ifupdown fping
#
# 2) Then install this script into a folder and add to your crontab -e this row:
# */5 * * * * /yourhome/yourname/network_check.sh
#
# Note:
# If you want to perform automatic repair fsck at reboot
# remember to uncomment fsck autorepair here: nano /etc/default/rcS

# Let's clear the screen
clear

# Write here the gateway you want to check to declare network working or not
gateway_ip='www.google.com'

# Here we initialize the check counter to zero
network_check_tries=0

# Here we specify the maximum number of failed checks
network_check_threshold=5

# This function will be called when network_check_tries is equal or greather than network_check_threshold
function restart_wlan0 {
    # If network test failed more than $network_check_threshold
    echo "Network was not working for the previous $network_check_tries checks."
    # We restart wlan0
    echo "Restarting wlan0"
    /sbin/ifdown 'wlan0'
    sleep 5
    /sbin/ifup --force 'wlan0'
    sleep 60
    # If network is still down after recovery and you want to force a reboot simply uncomment following 4 rows
    #host_status=$(fping $gateway_ip)
    #if [[ $host_status != *"alive"* ]]; then
    #    reboot
    #fi
}

# This loop will run network_check_tries times and if we have network_check_threshold failures
# we declare network as not working and we restart wlan0
while [ $network_check_tries -lt $network_check_threshold ]; do
    # We check if ping to gateway is working and perform the ok / ko actions
    host_status=$(fping $gateway_ip)
    # Increase network_check_tries by 1 unit
    network_check_tries=$[$network_check_tries+1]
    # If network is working
    if [[ $host_status == *"alive"* ]]; then
        # We print positive feedback and quit
        echo "Network is working correctly" && exit 0
    else
        # If network is down print negative feedback and continue
        echo "Network is down, failed check number $network_check_tries of $network_check_threshold"
    fi
    # If we hit the threshold we restart wlan0
    if [ $network_check_tries -ge $network_check_threshold ]; then
        restart_wlan0
    fi
    # Let's wait a bit between every check
    sleep 5 # Increase this value if you prefer longer time delta between checks
done

правка 26.01.2018: Я удалил временные файлы, чтобы сценарий работал в памяти и не записывал на SD-карту Raspberry.

3
27.01.2020, 19:53

Создать скрипт проверить _connection.sh

#!/bin/bash

ping -c4 www.google.com
let a=$?
if [ "$a" != "0" ]; then
  /sbin/shutdown -r +1 Connection lost, rebooting...
fi

Измените разрешения, чтобы он был исполняемым:

chmod +x check_connection.sh

Отредактируйте /etc/crontabс помощью sudo , чтобы он запускал предыдущий скрипт каждые 30 минут:

sudo crontab -e

И добавьте эту строку:

*/30 * * * * /home/yourname/check_connection.sh
0
16.01.2021, 10:01

Теги

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