如何安排每晚重启?

114 scheduled

我在运行特定应用程序 XBMC 时遇到一些周期性问题。如果我经常使用 XBMC,我似乎没有任何问题,但如果我无人看管超过 12 小时,我需要重新启动才能让它再次工作。

我知道计划重启不是答案,但在我弄清楚问题之前,我需要每天早上计划重启,这样我的妻子可以在我不在时使用它并且它不会被扔出窗外:)

有接班人吗?

sBl*_*att 186

我会使用 cron(应该已经安装了):

编辑 crontab:

sudo crontab -e
Run Code Online (Sandbox Code Playgroud)

第一次你可能必须选择你喜欢的编辑器(比如 nano)

插入一行

0 4   *   *   *    /sbin/shutdown -r +5
Run Code Online (Sandbox Code Playgroud)

在底部。解释:

m      h    dom        mon   dow       command
minute hour dayOfMonth Month dayOfWeek commandToRun
Run Code Online (Sandbox Code Playgroud)

所以这条线

  0 4   *   *   *    /sbin/shutdown -r +5
Run Code Online (Sandbox Code Playgroud)

将在每天凌晨 4:05 重新启动您的系统。(凌晨 4:00 + 5 分钟)

Ctrl+ X, Y,Enter应该让你退出 crontab(如果使用 nano)

注意:您可能必须以crontab -eroot身份运行,因为关机需要 root。crontab -e在 /tmp 而不是实际的 crontab 中打开一个文件,以便它可以检查您的新 crontab 是否有错误。如果没有错误,那么您的实际 crontab 将被更新。

  • 为什么要加+5? (8认同)
  • 这对我不起作用。使用 `crontab -e` 和 `sudo crontab -e` 在你退出时将文件保存到一个临时位置(例如 /tmp/crontab.Y88XQl/crontab)并且任务没有运行。我被迫直接编辑 /etc/crontab (2认同)
  • @wal“crontab -e 在 /tmp 中打开一个文件而不是实际的 crontab,以便它可以检查新的 crontab 是否有错误并防止您用这些错误覆盖实际的 crontab。如果没有错误,那么您的实际 crontab 将进行更新。” https://unix.stackexchange.com/questions/197504/shall-i-save-my-crontab-file-in-tmp (2认同)
  • 也许它会对某人有所帮助:我必须在 Linux Mint 中的“sudo crontab -e”打开的文件中的“rebo​​ot”命令之前使用“sudo”(但我不确定在这种情况下它是否有任何区别)。 (2认同)

Kee*_*ook 17

将此添加到/etc/cron.daily/zz-reboot应该工作:

#!/bin/sh
shutdown -r now
Run Code Online (Sandbox Code Playgroud)

并且sudo chmod a+x /etc/cron.daily/zz-reboot。“zz”前缀将强制它在该目录中的所有其他脚本中最后运行。检查/etc/crontab一天中实际发生的时间:

grep daily /etc/crontab | awk '{print $2 ":" $1}'
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,那么“常规”cron 条目也可以工作,通过 sudo crontab -e

MINUTE HOUR * * * shutdown -r now
Run Code Online (Sandbox Code Playgroud)

最后,如果您只想进行一次性重启,您可以使用at

echo "shutdown -r now" | sudo at 04:30
Run Code Online (Sandbox Code Playgroud)


小智 6

我已经在工作中使用 cronjobs 大约一个月了,并安排断电和重新启动。这很简单。我知道这是大约 5 年前问过的问题,但如果有人仍然有问题,你可以使用这个方法,你就会被设置。

打开终端(ctrl+T)

sudo nano /etc/crontab
Run Code Online (Sandbox Code Playgroud)

一直滚动到底部并输入以下命令

00 6 * * * root reboot 
Run Code Online (Sandbox Code Playgroud)

设置为每天早上 6 点重新启动,然后按 Enter

如果您想安排每天晚上 11 点断电,您可以输入

00 23 * * * root poweroff
Run Code Online (Sandbox Code Playgroud)

我仍然需要弄清楚如何在机器停机时使用 cronjob 启动机器。一旦我弄清楚,我就会编辑这个答案。

PS这是我第一次在任何表格上发布答案;希望它可以帮助别人!:D

  • 5 年前有一个答案,内容相同,但有更多细节和自动语法验证(通过“crontab -e”)。 (6认同)
  • 不要忘记重新启动`cron`:`sudo /etc/init.d/cron restart` (4认同)

小智 6

这是一个较旧的问题,但它作为搜索结果出现,并且不包含有关 systemd 的任何信息,因此我将添加一个有关如何使用 systemd 进行计划重启的示例。示例中的文件名和单元描述是任意选择的并且可以更改。

  1. 添加重新启动系统的服务单元。为此,请创建一个新文件并向/etc/systemd/system/sched-reboot.service其中添加必要的配置。以下服务配置将在启动时通过 systemctl 强制重新启动。

     [Unit]
     Description=Scheduled Reboot
    
     [Service]
     Type=oneshot
     ExecStart=/usr/bin/systemctl --force reboot
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加一个计时器,它将按计划启动重新启动服务。在 中创建一个新文件/etc/systemd/system/sched-reboot.timer。以下计时器配置将在每天凌晨 4 点运行重新启动服务

     [Unit]
     Description=Reboot Scheduling
    
     [Timer]
     OnCalendar=*-*-* 4:00:00
    
     [Install]
     WantedBy=multi-user.target
    
    Run Code Online (Sandbox Code Playgroud)
  3. (可选)运行systemd-analyze verify /etc/systemd/system/sched-reboot.*以检查配置文件中是否有错误。如果返回为空,则文件是有序的。

  4. sudo systemctl enable sched-reboot.timer通过运行和来启用并启动计时器sudo systemctl start sched-reboot.timer

  5. (可选)运行systemctl list-timers以查看所有活动计时器及其下一个和最后一个启动信息。

有关计时器和设置日历事件的语法(如OnCalendar示例中所示)的更多信息,请查看ArchWiki 关于计时器的部分