при выходе из системы другому пользователю, выключении или перезапуске машины иногда я могу получить это сообщение
, некоторые программы все еще работают
список программ [ 115] blockquote>
ожидает завершения программ. прерывание этих программ может привести к потере работы
blockquote>Есть ли способ, которым ubuntu может автоматически определить, когда эти программы выполнили свою задачу перед закрытием? Я понимаю, что существует проблема с программами, которые могли произойти сбой. Но некоторым другим программам, таким как Ubuntuone , может потребоваться некоторое дополнительное время для синхронизации, прежде чем система сможет завершить работу
Вот, пожалуйста, это результат анализа. Я понятия не имею, что можно с этим сделать, но я очень рад видеть какое-то волшебство!
martin@ubuntu-desktop:~$ u1sdtool --status State: QUEUE_MANAGER connection: With User With Network description: processing the commands pool is_connected: True is_error: False is_online: True queues: IDDLE
единственная разница, когда демон синхронизируется, - это последняя строка, которая может стать
queues: WORKING
или
queues: WORKING_ON_BOTH
Я не уверен, что это было бы неплохо. Можете ли вы представить, что вам нужно было w8 для синхронизации файлов 1 Гб перед выключением? Разве не имеет больше смысла, что сигналы закрытия посылаются программам, чтобы они могли выйти, и если есть дальнейшая работа, то она может быть возобновлена после повторной загрузки.
Даже Windows позволяет только 30 секунд, прежде чем она принудительно закрывает программы для закрытия.
Я действительно не понимаю, как это может быть полезно! Если я заказываю завершение работы, я хочу, чтобы эта штука была закрыта как можно скорее, и загружалась как можно скорее, а не ждать, пока программы сделают idontknowwhat. В конце концов, именно моя ответственность привела к закрытию, я должен знать, когда это хорошее время или нет.
Редактировать (прочитать все комментарии ниже!):
Вот скрипт, который проверяет текущее состояние UbuntuOne и выключается, только когда статус простаивает.
#! /bin/bash
gracetime_given=false
while true; do
u1sdtool_status=$(u1sdtool --status | grep -o 'queues: IDLE')
timestamp=$(date +%H:%M:%S)
if [ "$u1sdtool_status" = "queues: WORKING" -o "$u1sdtool_status" = "queues: WORKING_ON_BOTH" ]; then
echo "$timestamp - UbuntuOne has not finished sync, waiting for conclusion."
echo "Re-checking in 30 seconds."
gracetime_given=false
sleep 30
elif [ "$u1sdtool_status" = "queues: IDLE" ]; then
if [ $gracetime_given = false ]; then
echo "u1sdtools seems to be idle at the moment..."
echo "Giving u1sdtool some grace time, rechecking in 10 seconds."
gracetime_given=true
sleep 10
else
echo "This is where you shutdown!!!"
sleep 5
sudo shutdown -h now
fi
else
echo "Something is really wrong!!!"
break
fi
done
Чтобы использовать его, вам нужно сделать следующее: на терминале вам нужно использовать sudo visudo
и добавить эту строку в конец файла <yourusername> hostname=NOPASSWD: /sbin/shutdown -h now
, чтобы при выключении компьютера с помощью пароля не требовалось счет.
После этого вам нужно сохранить скрипт в любом месте (), вам нужно использовать chmod 755 <nameofthescript.sh>
, чтобы сделать его исполняемым.
Затем вы можете просто запустить скрипт и посмотреть, как он работает:
shutdown -h now
Надеюсь, что это работает и комментируйте, как вы хотите, код, если вы понимаете, что это на самом деле мой самый первый скрипт bash!
Gl and hf;)
Есть диалоговое окно, которое появляется, когда вы выходите из gnome-сессии, и есть приложения, которые просто не будут закрываться, но я не помню, позволяет ли это отложить завершение работы до завершения определенного процесса. Я не верю, что это так, но это не должно быть слишком сложно добавить это, я думаю.
Как уже отмечали другие, вы можете подождать определенное время или до определенного момента времени, прежде чем выключить систему. Еще одна вещь, которую вы можете сделать, это написать собственный сценарий для него, но я не буду шокирован, узнав, что кто-то написал приложение для этого.