我想安排每 30 分钟重启一次 Ubuntu。有什么命令或图形化方式可以实现吗?
答案1
最好的方法取决于为什么您希望 Ubuntu 每半小时重启一次。
因此我建议编辑你的问题来解释你为什么希望这样做。
每 30 分钟重新启动一次,并在每次重新启动之前警告用户:
假设人们可能正在本地或远程使用该机器,最好避免在没有任何警告的情况下从他们下面重新启动 Ubuntu。因此,reboot
我建议安排命令,而不是安排shutdown
命令以便警告用户。
要安排每半小时关机一次并在关机前 5 分钟发出警告,请将其添加到/etc/crontab
:
#minute hour mday month wday user command
*/30 * * * * root shutdown -r +5
实际上,您不必添加第一行,这是一条注释。我将其包含在内是为了清晰起见——它已经在那里了。
- 这将安排系统在命令运行
-r
五分钟后( )停机并重新启动+5
( )。它每隔半小时运行一次(*/30
)。请参阅man cron
和man 5 crontab
。 - 更改
+5
为其他内容来改变用户在收到重启警告后的等待时间。 0,30
如果您愿意,每 1 分钟也可以。(类似地,如果是每 20 分钟,您可以写成*/20
或0,20,40
。)- 确保在顶部附近指定的变量
/sbin
中。否则,(在PATH
/etc/crontab
shutdown
command
) 将必须被调用为/sbin/shutdown
。
该命令将始终在半小时标记处运行,如果当时机器正在运行。这将导致每半小时宣布一次关机,并在整点 5 分和 35 分时执行关机。
- 这里的一个好处是管理员可以使用 取消刚刚宣布的关机
sudo shutdown -c
。 - 如果计算机在计划命令运行的特定时间关闭,它将不会运行。如果这不能满足您的需求,您必须以不同的方式安排重新启动。(这不是针对使用 的,
shutdown
但如果您计划 ,则同样适用reboot
。)在这种情况下,请编辑您的问题以解释您的特定需求。(我建议anacron
但你的时间间隔太短了。)
使管理员可以更轻松地完全防止自动重启的发生:
您可能需要进行此项设置,以便管理员可以轻松暂停所有自动计划的重启:
#minute hour mday month wday user command
*/30 * * * * root [ -e /etc/noautoreboot ] || shutdown -r +5
noautoreboot
此计划重启以相同的方式进行 - 每半小时一次,提前五分钟发出警告 - 但如果中存在名为 的文件,它将不会安排重启/etc
。
管理员可以使用以下命令创建此控制文件:
sudo touch /etc/noautoreboot
可以使用以下方法删除:
sudo rm /etc/noautoreboot
请注意文件是否存在,重要的不是它包含什么。
如果已安排重启并且用户收到警告,然后文件创建后,(即将发生的)重新启动仍会发生。
这是如何工作的?它使用短路-评估或者运算符 (
||
) 的简写形式为:如果
/etc/noautoreboot
不存在,运行shutdown -r +5
。这个答案解释短路和和或者运算符可以执行
if
-then
逻辑。对于简短、直观且非常不正式的解释,您可以这样阅读该命令:/etc/noautoreboot
存在!或者,运行shutdown -r +5
。看
man [
了解测试本身是如何进行的。
答案2
我喜欢通过告诉会话管理器我们想要重新启动来做到这一点。这可以在没有 root 权限的情况下完成,并且我们会得到一个不错的窗口,警告我们系统将要重新启动 - 如果我们愿意,甚至可以取消重新启动。
图形方式 - 首选方法
从 Ubuntu 软件中心安装gnome-schedule
。如果您不想安装任何其他东西,请通过终端方式进行安装。
gnome-schedule
从仪表板打开,创建一个新的重复任务,并设置以下选项:
- 简介:随心所欲
- 命令:
dbus-send --print-reply --dest="org.gnome.SessionManager" /org/gnome/SessionManager org.gnome.SessionManager.Reboot
- 选择十、应用就在命令下方。
- 时间和日期,高级:
- 分钟:0.30
保留其他选项的默认值。单击添加。
终端方式 - 无需额外的软件
从终端运行:
crontab -e
添加此行:
0,30 * * * * DISPLAY=:0 dbus-send --print-reply --dest="org.gnome.SessionManager" /org/gnome/SessionManager org.gnome.SessionManager.Reboot
保存并退出。假设您正在使用nano
(默认的),请按Ctrl+o和Ctrl+x。
请注意,如果您的 DISPLAY 实际上与 不同,则此方法将不起作用,:0
这就是不推荐此方法的原因。但老实说,如果您每 30 分钟重新启动一次计算机,您的 DISPLAY 很可能始终是:0
。
不使用 Gnome 或 Unity?
上面解释的两种方法都依赖于一些 gnome 组件,这些组件在 Gnome 会话和 Unity 上都可以找到。如果您想在其他环境中执行此操作(例如 Kubuntu 的 KDE、Kubuntu 的 LXDE...),最好用以下命令替换该命令:
dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart
这不会要求确认,并将立即重新启动,但将在所有环境中工作,当然假设您没有手动卸载 ConsoleKit。
答案3
从命令行运行sudo crontab -e
并将此行添加到文件中:
0,30 * * * * reboot
这告诉系统reboot
以 root 身份每 30 分钟运行一次命令。有关时间语法的概述,请参见此处:http://linuxmoz.com/crontab-syntax-tutorial/