我想每天凌晨 01:00 用 cron 停止 Linux。
我尝试的是:sudo -i,crontab -e并00 01 * * * shutdown -h now在终端中。
我尝试了很多类似的命令,例如00 01 * * * poweroff,但这些命令从来没有工作过。我保存crontabwith ctrl 0 + enter,然后执行 ctrl X 。当我要离开控制台时,我没有看到任何错误,我只看到 crontab 已成功安装。
我使用 x2go 访问 Linux,但无法直接以 root 身份登录。当我尝试以 root 身份登录时,出现错误:
ttyname 失败,设备的 ioctl 不合适
当我浏览文件时,我注意到我无法访问根文件夹,因为我没有权限。
我认为问题可能是我没有 root 访问权限,但sudo -i应该给我 root 访问权限。我还尝试通过输入命令sudo passwd root然后输入 来启用 root 访问权限su root。
这是我第一次使用 Linux,所以请不要犹豫,尽可能详细地解释。
编辑:好的,所以我找到了解决方案,我只需在所需时间前一小时设置命令即可。我不知道为什么,但它有效。感谢大家的帮助。
出于安全原因,CRON 使用非常小的 shell 环境。这包括最小的 PATH 和 HOME 变量。在大多数情况下,您希望对所有命令使用完整路径。
所以,我建议你首先运行:
$ which shutdown
/sbin/shutdown
Run Code Online (Sandbox Code Playgroud)
现在您知道该命令的完整路径,并且您希望在 CRON 定义中使用它:
0 1 * * * /sbin/shutdown -h now
Run Code Online (Sandbox Code Playgroud)
如果您想向 shell 添加变量(或者需要为了运行某些命令),您可以在文件顶部添加或更新它们。例如:
PATH=/sbin:${PATH}
HOME=/root
0 1 * * * /sbin/shutdown -h now
Run Code Online (Sandbox Code Playgroud)
请记住,空格和制表符的处理是不同的(有关详细信息,请参阅文档)。
经常更新的一个变量是MAILTO=<your-email>. 默认情况下,电子邮件将发送至rootroot 帐户。我更喜欢使用别名(通常在 中定义/etc/aliases)。别名允许我将电子邮件发送给多个管理员,而不仅仅是一个人。
要成为 root,我使用以下命令:
sudo su -
Run Code Online (Sandbox Code Playgroud)
我发现它比许多其他解决方案更干净。然后您可以crontab使用以下命令编辑 root 用户的:
crontab -e
Run Code Online (Sandbox Code Playgroud)
正如你在问题中所表明的那样。
否则,前导零可能没问题。我从来没有把它们放在那里,例子也没有显示这一点。以防万一,我会尝试不使用它们,如上面所示。
有关更多信息,我建议您阅读 crontab 手册:
man crontab
man 5 crontab
Run Code Online (Sandbox Code Playgroud)
第一个是关于命令行的。
第二个是关于文件格式。他们谈论 shell 变量。《The》PATH、《The》MAILTO等。这是一本很好读的书。