cron 关闭命令不起作用

Vin*_*ich 1 shutdown cron

我想每天凌晨 01:00 用 cron 停止 Linux。

我尝试的是:sudo -icrontab -e00 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,所以请不要犹豫,尽可能详细地解释。

编辑:好的,所以我找到了解决方案,我只需在所需时间前一小时设置命令即可。我不知道为什么,但它有效。感谢大家的帮助。

Ale*_*lke 6

出于安全原因,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等。这是一本很好读的书。