延迟关闭,直到UbuntuOne完成同步

当注销到其他用户,关闭或重新启动机器时,有时我会收到此消息

一些程序仍在运行

节目单

等待程序完成。 中断这些程序可能会导致您失去工作

在关闭之前,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 

我不确定这是不是很好,你能想象如果你必须在关闭前同步1Gb的1Gb文件吗? 将关闭信号发送到程序以便它们可以退出并且如果有进一步的工作则可以在再次启动之后恢复它是否更有意义。

即使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并在文件末尾添加此行 hostname=NOPASSWD: /sbin/shutdown -h now这样就不需要密码了使用帐户关闭计算机。

之后你需要将脚本保存在任何地方(),你需要使用chmod 755 来使其可执行。

然后你可以运行脚本,看看它是如何工作的:

  • 获取UbuntuOne的当前状态
  • 如果没有空闲重新检查,看它是否每30秒闲置一次
  • 如果空闲将再给它10秒,并重新检查状态是否仍然空闲
  • 如果它仍处于空闲状态,它将立即使用shutdown -h now

希望这可以在代码上运行和评论,只要你明白这实际上是我的第一个bash脚本!

G1和hf;)

当您退出gnome-session时会出现一个对话框,并且有些应用程序不会退出,但我不记得是否允许您推迟关闭直到某个进程完成。 我不相信它,但我想,添加它不应该太难。

正如其他人所指出的那样,在关闭系统之前,您可以等待一段时间或直到某个时间点。 你可以做的另一件事,就是为它编写一个自定义脚本,但我不会感到震惊,因为有人为此编写了一个应用程序。