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

8

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

Я также опубликовал это на unix.stackexchange .

Эль Бурро
источник
1
Если вы загружаете торренты, то некоторые из них имеют возможность завершить работу после завершения. убедитесь, что завершение означает 100%, а не посев. И если вы делаете это в командной строке, просто добавьте && halt в конце команды, чтобы автоматически остановить компьютер. && означает выполнить после.
theTuxRacer
Почти все ответы верны, имхо. Чем больше деталей вы сообщаете о типе загрузки и используемой вами программе, тем больше мы можем быть точными :)
Pitto
Я думаю, что основанный на процессах ответ в вашем кросс-посте является одним из самых приятных и гибких, которые я видел. unix.stackexchange.com/a/65060/21070 Вы можете использовать `ps -elf | grep <somthing_related_to_task>, чтобы определить PID, срок действия которого истекает в конце процесса.
TafT

Ответы:

8

Я знаю, что это не совсем отвечает на ваш вопрос, но вы также можете сделать это на основе времени, т.е. если вы думаете, что загрузка завершится через 2 часа, вы можете просто выполнить команду:

shutdown -h +120
binW
источник
8

Чтобы сделать один раз, чтобы выключить компьютер без пароля:

Откройте командную строку и введите:

sudo visudo 

В открывшемся файле добавьте следующую строку в конце:

yourusername ALL=NOPASSWD: /sbin/halt

Затем выйдите из редактора и сохраните его ( Ctrl+ X).

Теперь вы можете выключить компьютер из командной строки, например, после загрузки чего-либо:

wget UrlOfTheFileYouWantToDownload && sudo halt
AK76
источник
4
Чтобы убедиться, что wget вернулся без ошибок, замените «;» с "&&".
Дэвид Риверс
3

Для выключения после обновления вы можете использовать этот скрипт на python: http://kotbcorp.blogspot.com/2009/06/shutdown-after-update-in-ubuntu.html

Для выключения после загрузки я использую эту команду:

wget http://somehwere.com/path/to/some.file && halt
aneeshep
источник
2
Помните, что для этого haltтребуются привилегии суперпользователя, поэтому вам следует запустить их sudo -sперед вводом команд.
loevborg
3

Другие ответы верны, но чего-то не хватает:

wget UrlOfTheFileYouWantToDownload ; sudo halt

против

wget UrlOfTheFileYouWantToDownload && sudo halt

Второй выключит компьютер только в случае wgetуспешного завершения . Первый из них будет запускать остановку независимо от того, wgetвернется ли он успешно или не получится .

Дэвид Онеилл
источник
2

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

FOSS DIVERSER
источник
2

Я думаю, это во многом зависит от того, как вы загрузили.

Если вы говорите об обновлении apt-get, обновите последовательность, поскольку в качестве пользователя root вы объединяете свои команды, используя && (последовательность продолжается, только если ошибок не было)

sudo su -
apt-get update && apt-get upgrade && shutdown -h now

Если вы говорите о загрузке (например, с помощью wget) [снова, объедините команды вместе, используя обозначение &&, гарантируя, что команды будут выполняться по порядку, только если предыдущая команда была успешной]

sudo su -
wget -t0 -c http://somedownloadsite/path/file.foo && shutdown -h now

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

Финли
источник
2
Эти команды не будут работать, потому что sudo su -запускается новая оболочка, а команды после точки с запятой не выполняются, пока новая оболочка не завершится.
loevborg
Честный комментарий. изменили инструкции, чтобы указать, что это отдельная последовательность команд.
Финли
1

Я лично обнаружил, что с помощью gedit проще настроить оригинал

yourusername ALL=NOPASSWD: /sbin/halt    

так как sudo visudoпутает мне и не показывать последнюю строку ясно

Так что я использовал

sudo -H gedit /etc/sudoers

затем закончил с чистой (для меня) страницей

# User privilege specification
root    ALL=(ALL:ALL) ALL


# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d
shantiq ALL=NOPASSWD: /sbin/halt

Просто подумал, что упомяну, что в случае, если кто-то еще будет немного смущен

шань
источник
1

Вместо изменения разрешений на выключение вы можете сделать следующее:

sudo bash -c 'apt-get update; apt-get dist-upgrade; shutdown -h now'

Для этого запускается приглашение bash от имени пользователя root, который выполняет элементы в списке в одинарных кавычках, а затем завершает работу. Преимуществом этого метода является то, что Ubuntu забудет вашу первоначальную sudoаутентификацию через некоторое время (в зависимости от установленного периода ожидания - 15 минут по умолчанию), и кто-то, сталкиваясь с вашей машиной, может только остановить текущую команду, но не запустить новую. Кроме того, для всех, кто говорит, чтобы использовать su, попробуйте:

sudo -s
Calcipher
источник
Что делать, если сеть на короткое время выходит из строя и apt-get не справляется со своей работой?
Quamis
1
Я предполагаю, что вы все еще хотите выключиться. Если какой-либо этап команд в -c завершится неудачно, остальные продолжат работу, так как я использовал точку с запятой вместо && (любые команды, связанные с &&, будут работать только в том случае, если каждая из них по очереди преуспеет).
Калькулятор
0

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

обычно я делал sudo su; sleep 3600; halt;

Quamis
источник
почему голосование вниз?
Quamis
Кто-то, вероятно, не согласен с частью «нет способа узнать»?
Белаква