Intereting Posts
Как войти в систему через tty Как настроить прокси-аутентификацию в оболочке Debian? Понимание linux Bridging Как я могу предупредить о завершении длинной задачи над ssh? Чтение содержимого файла и разбиение с помощью ksh Как получить код статуса grep, расположенный в поиске Использование инструкции If в Crontab для создания оповещения Сценарий Bash для обнаружения, когда мой сервер отключен или отключен Какая услуга зарегистрирована для определенного интерфейса на D-Bus? Как драйверы GPU на самом деле работают в Linux? Что касается сервисов systemd, что означает monoтонная метка времени? Измерение, сколько энергии требуется для беспроводного подключения Как я могу добавить пакет к установке Ubuntu по умолчанию? Почему по умолчанию umask – 002 или 022 во многих Unix-системах? Кажется неубедительным по умолчанию Назначение каталога автозапуска-скриптов

Как завершить работу компьютера после завершения задачи?

Обычно я начинаю загрузку, прежде чем идти в школу.
Какую команду я должен использовать для автоматического создания необходимых сбережений и отключения компьютера после выполнения конкретной задачи?
(Скажем, после установки обновлений или после загрузки большого файла.)

Я также перекрестился в askubuntu .

Это зависит от вашей задачи. Если это инструмент командной строки, вы можете просто запустить halt или shutdown -h now :

  1. wget http://..../somelargefile; halt wget http://..../somelargefile; halthalt будет выполнена после wget

  2. wget http://..../somelargefile && halthalt будет выполняться, если wget возвратит ошибок

  3. wget http://..../somelargefile || halt wget http://..../somelargefile || halthalt будет выполняться, если ошибки возврата wget

Альтернативой этому является использование kshutdown – в этом приложении вы можете указать, какое действие должно быть выполнено (перезагрузка / выключение / спящий режим / etc или выполнение команды) и когда (через некоторое время или когда другое приложение завершает работу). Если вы хотите использовать этот инструмент, вам нужно выбрать правильный процесс – некоторые утилиты обновления запускают несколько подпроцессов.

KShutdown

Каждый процесс имеет каталог с именем в соответствии с его идентификатором процесса (pid) в файловой системе proc . Поэтому вы можете дождаться завершения определенного процесса, проверяя, существует ли его каталог повторно.

Вы можете использовать это для выполнения выключения системы после завершения процесса, как это (замените 2296 на pid, чтобы дождаться):

 su -c 'while [[ -d /proc/2296 ]]; do sleep 1; done; poweroff' 

Преимущества:

  • Вы можете решить, следует ли отключать после отключения команды оболочки
  • Завершение выдается с правами root, команда для ожидания необязательно выполняется как root (нет необходимости обходить оповещение о позднем sudo password).

Недостатки:

  • Может случиться так, что ваш процесс завершается, и ОС повторно использует тот же pid для вновь созданного процесса в течение этой секунды (состояние гонки). Таким образом, вы продолжаете ждать завершения этого нового процесса.

Вы можете использовать && и || операторы для объединения команд вместе. Например:

 apt-get update && sleep 2 && init 0 

который будет выполнять обновление системы с использованием aptitude, подождать 2 секунды и перейти к уровню выполнения 0, в зависимости от вашей системы это может или не может отключить аппаратное обеспечение.

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

Если вы хотите отслеживать уже запущенный процесс, вы можете сделать это в оболочке :

 # while pgrep &>/dev/null -f process_name; do sleep 60; done; shutdown -h now 

Существует приложение, названное sentinella, которое может сделать это для вас с его графическим интерфейсом: sentinella

для его установки:

 sudo aptitude update sudo aptitude install sentinella