user244413 Asked:2020-07-10 03:15:12 +0000 UTC2020-07-10 03:15:12 +0000 UTC 2020-07-10 03:15:12 +0000 UTC 在指定时间关闭计算机 772 我希望我的 Ubuntu 每天在特定时间自动关闭。如何做到这一点? linux 2 个回答 Voted user244413 2020-07-10T03:15:12Z2020-07-10T03:15:12Z 一个名为cron. 为了安排任务,我们将把它添加到/etc/crontab. 打开终端 - Ctrl Alt T。 可以使用以下命令编辑该文件: sudo nano /etc/crontab 要在每天 23:03 关闭计算机,请在文件中添加以下行: 03 23 * * * root shutdown -h now 文件的最后一行必须为空。 这部分是基于 askubuntu编写的。 解释更详细。 (更新) 该文件本身/etc/crontab解释了任务表的格式: # m h dom mon dow user command 前两个字段是任务启动的分钟和小时, 第三个字段(dom)是月份中的哪一天(Day of Month), 然后是月份, 第五个字段(dow)是星期几, 然后将代表其运行命令的用户 ,实际上是团队。 开始时间 所有条件(开始时间)都用“逻辑与”来检查,除了条件“星期几”和“月几日”——一起指定,它们都用“逻辑或”处理,即“on任何一天”,这反映在文档(Ubuntu、Debian、FreeBSD)中。(参见维基百科,man 5 crontab)。如果您想通过“逻辑与”来检查它们,请在命令本身中进行。 例如,在 13 号星期五重新加载: 0 0 13 * * root [ "$(date '+\%u')" -eq 5 ] && shutdown -r now Crontab用户. 除了常见的 crontab 表,每个用户都有自己的。您可以使用命令编辑您的个人表 crontab -e 可以使用命令编辑另一个用户的表,例如“root” sudo crontab -u root -e 在最初的问题中,我认为使用此选项会更正确。 如果系统中只有一个用户,那么您可以通过它和通过'root'关闭计算机,没有区别。 感谢0andriy和Sergey先生,他们提请我注意这种可能性。 请注意,在特定用户的表格中,任务格式略有不同,无需指定用户。代替 03 23 * * * root shutdown -h now 需要写 03 23 * * * shutdown -h now 环境变量 性能问题的一个常见原因crontab是运行守护程序时环境变量的不同定义cron,尤其是变量$PATH。您可以通过插入该行 来找出环境变量-acroncrontab * * * * * env > /tmp/env.output 创建文件后/tmp/env.output,可以删除此行。 事实证明,Ubuntucron以PATH=/usr/bin:/bin. 要正常工作,您需要$PATH在crontab. 请注意,变量的值没有被替换,即 PATH = $HOME/bin:$PATH 不会工作。 解决此问题的另一种方法是使用完整路径来运行命令。但是,如果您想在终端中测试您的命令或将其转移到另一个系统,那就更糟了。 如果您正在运行 GUI 程序,您还需要定义 $DISPLAY: DISPLAY=:0 哦,别忘了在crontab-a的末尾放一个空行。 答案的第二部分是根据 关于 askubuntu 上 -th问题的问题编写的。 感谢所有评论者的富有成果的讨论。crontab Best Answer andreymal 2020-07-16T16:52:24Z2020-07-16T16:52:24Z 为什么要在神圣的 systemd 系统上触摸 cron?:) 在 systemd 中,关闭计算机的一种方法是打开一个服务,该服务systemd-poweroff运行一个命令/bin/systemctl --force poweroff来明确它的作用。 让我们通过创建一个文件/etc/systemd/system/systemd-poweroff.timer(当然是在根目录下)来创建一个计时器以按计划启动此服务: [Timer] OnCalendar=*-*-* 23:03:00 [Install] WantedBy=timers.target (日期格式ДеньНедели Год-Месяц-День Часы:Минуты:Секунды,星期可选,星号表示任何值。) 运行它(定时器,而不是关机): sudo systemctl start systemd-poweroff.timer 并添加到 autoload 以便每次不用手动启动: sudo systemctl enable systemd-poweroff.timer 现在这个计时器将在每天 23:03 开始写入文件名中的服务 - systemd-poweroff- 从而关闭计算机。 使用命令sudo systemctl status systemd-poweroff.timer可以查看定时器的信息:下一次运行的准确时间、剩余时间等: $ sudo systemctl status systemd-poweroff.timer * systemd-poweroff.timer Loaded: loaded (/etc/systemd/system/systemd-poweroff.timer; enabled; vendor preset: enabled) Active: active (waiting) since Tue 2019-07-16 11:34:01 MSK; 10min ago Trigger: Tue 2019-07-16 23:03:00 MSK; 11h left Jul 16 11:34:01 home systemd[1]: Started systemd-poweroff.timer. 如果您编辑了文件(例如,更改了时间),则需要执行sudo systemctl daemon-reload以应用更改。 您可以在 archeviki 上阅读有关计时器的更多信息。
一个名为
cron
.为了安排任务,我们将把它添加到
/etc/crontab
.打开终端 - Ctrl Alt T。
可以使用以下命令编辑该文件:
要在每天 23:03 关闭计算机,请在文件中添加以下行:
文件的最后一行必须为空。
这部分是基于 askubuntu编写的。
解释更详细。
(更新)
该文件本身
/etc/crontab
解释了任务表的格式:前两个字段是任务启动的分钟和小时,
第三个字段(dom)是月份中的哪一天(Day of Month),
然后是月份,
第五个字段(dow)是星期几,
然后将代表其运行命令的用户
,实际上是团队。
开始时间
所有条件(开始时间)都用“逻辑与”来检查,除了条件“星期几”和“月几日”——一起指定,它们都用“逻辑或”处理,即“on任何一天”,这反映在文档(Ubuntu、Debian、FreeBSD)中。(参见维基百科,
man 5 crontab
)。如果您想通过“逻辑与”来检查它们,请在命令本身中进行。例如,在 13 号星期五重新加载:
Crontab
用户.除了常见的 crontab 表,每个用户都有自己的。您可以使用命令编辑您的个人表
可以使用命令编辑另一个用户的表,例如“root”
在最初的问题中,我认为使用此选项会更正确。
如果系统中只有一个用户,那么您可以通过它和通过'root'关闭计算机,没有区别。
感谢0andriy和Sergey先生,他们提请我注意这种可能性。
请注意,在特定用户的表格中,任务格式略有不同,无需指定用户。代替
需要写
环境变量
性能问题的一个常见原因
crontab
是运行守护程序时环境变量的不同定义cron
,尤其是变量$PATH
。您可以通过插入该行来找出环境变量-a
cron
crontab
创建文件后
/tmp/env.output
,可以删除此行。事实证明,Ubuntu
cron
以PATH=/usr/bin:/bin
. 要正常工作,您需要$PATH
在crontab
.请注意,变量的值没有被替换,即
不会工作。
解决此问题的另一种方法是使用完整路径来运行命令。但是,如果您想在终端中测试您的命令或将其转移到另一个系统,那就更糟了。
如果您正在运行 GUI 程序,您还需要定义 $DISPLAY:
哦,别忘了在
crontab
-a的末尾放一个空行。答案的第二部分是根据 关于 askubuntu 上 -th问题的问题编写的。 感谢所有评论者的富有成果的讨论。
crontab
为什么要在神圣的 systemd 系统上触摸 cron?:)
在 systemd 中,关闭计算机的一种方法是打开一个服务,该服务
systemd-poweroff
运行一个命令/bin/systemctl --force poweroff
来明确它的作用。让我们通过创建一个文件
/etc/systemd/system/systemd-poweroff.timer
(当然是在根目录下)来创建一个计时器以按计划启动此服务:(日期格式
ДеньНедели Год-Месяц-День Часы:Минуты:Секунды
,星期可选,星号表示任何值。)运行它(定时器,而不是关机):
并添加到 autoload 以便每次不用手动启动:
现在这个计时器将在每天 23:03 开始写入文件名中的服务 -
systemd-poweroff
- 从而关闭计算机。使用命令
sudo systemctl status systemd-poweroff.timer
可以查看定时器的信息:下一次运行的准确时间、剩余时间等:如果您编辑了文件(例如,更改了时间),则需要执行
sudo systemctl daemon-reload
以应用更改。您可以在 archeviki 上阅读有关计时器的更多信息。