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

qin*_*126 2 shell-script ubuntu ubuntu-12.04

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

#!/bin/bash
sudo shutdown -h now
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

sudo: no tty present and no askpass program specified
Run Code Online (Sandbox Code Playgroud)

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

/home/qinking126/scripts/test.sh: line 3: shutdown: command not found
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Bia*_*apy 5

确保 cron 脚本可执行并且也以 root 身份运行,并替换shutdown为以下提供的完整路径:

command -v shutdown
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/bash
/sbin/shutdown -h now
Run Code Online (Sandbox Code Playgroud)

请注意,添加一个名为类似/etc/cron.d/midnight-shutdown且包含以下内容的文件:

59 23   * * *   root    test -x /sbin/shutdown && /sbin/shutdown -h now
Run Code Online (Sandbox Code Playgroud)

应该做你想做的事,而不需要完整的 bash 脚本的开销。这是快速安装的代码:

echo '59 23 * * *   root    test -x /sbin/shutdown && /sbin/shutdown -h now' \
    | sudo tee '/etc/cron.d/midnight-shutdow'
sudo service cron reload
Run Code Online (Sandbox Code Playgroud)

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

echo '59 23 * * *   test -x /sbin/shutdown && /sbin/shutdown -h now' \
    | sudo tee '/etc/cron.d/midnight-shutdown'
sudo service cron reload
Run Code Online (Sandbox Code Playgroud)

很奇怪的是 cron 会打印出这样的错误消息。