我写了一个简单的 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 脚本关闭系统。