如何从 shell 脚本关闭 ubuntu 服务器?

如何从 shell 脚本关闭 ubuntu 服务器?

我写了一个简单的 shell 脚本来关闭一个 ubuntu 服务器。然后我创建了一个 cron 任务来每天 23:59 执行这个脚本。

#!/bin/bash
sudo shutdown -h now

我收到此错误信息:

sudo: no tty present and no askpass program specified

当我从代码中删除 sudo 时,我收到了不同的错误消息:

/home/qinking126/scripts/test.sh: line 3: shutdown: command not found

我该如何解决这个问题?

答案1

确保 cron 脚本是可执行的并以 root 身份运行,然后shutdown用以下提供的完整路径替换:

command -v shutdown

在 Ubuntu GNU/Linux (以及一般的 GNU/Linux) 上,它应该是/sbin/shutdown

#!/bin/bash
/sbin/shutdown -h now

请注意,添加一个名为的文件/etc/cron.d/midnight-shutdown,其中包含:

59 23   * * *   root    test -x /sbin/shutdown && /sbin/shutdown -h now

应该可以完成您想要的操作,而无需完整 bash 脚本的开销。以下是快速安装的代码:

echo '59 23 * * *   root    test -x /sbin/shutdown && /sbin/shutdown -h now' \
    | sudo tee '/etc/cron.d/midnight-shutdow'
sudo service cron reload

编辑:回复您的评论,另一种设置的可能性是:

echo '59 23 * * *   test -x /sbin/shutdown && /sbin/shutdown -h now' \
    | sudo tee '/etc/cron.d/midnight-shutdown'
sudo service cron reload

cron 打印这个错误消息是非常奇怪的。

答案2

我们也可以使用命令“sudo halt”关闭Ubuntu服务器。

答案3

我可以poweroff在 ssh 提示中为非 sudoers 启用(通常是 sudoer 命令),方法是作为 sudoer,将 +s 标志添加到命令可执行文件中。如下所示:

sudo chmod a+s /usr/sbin/poweroff

此后,非 sudo 用户可以通过 ssh 甚至通过以他们的名义运行的 shell 脚本关闭系统。

相关内容