You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu定时关机脚本仅触发通知但无法执行关机的问题求助

Ubuntu定时关机脚本仅触发通知但无法执行关机的问题求助

看起来你的问题主要出在两个地方:权限不足和脚本逻辑不符合你的需求,我来一步步帮你解决:

一、核心问题:普通用户无法通过at执行关机命令

shutdown是需要root权限的系统命令,而at默认会以当前普通用户的身份执行任务,所以你的关机任务根本没有权限运行,这就是电脑没关机的原因。

二、修复步骤

1. 先给脚本添加执行权限

打开终端,运行这条命令(替换成你脚本的实际路径):

chmod +x "/home/engineer/Programming/Projects/Ubuntu - Automatic shutdown script/shutdown_script.sh"

2. 配置sudo免密执行shutdown

为了让普通用户能通过at执行关机命令,我们需要配置sudo免密:

  • 运行sudo visudo(这是安全编辑sudo配置文件的方式,不要直接编辑/etc/sudoers)
  • 在文件的末尾添加一行(把engineer换成你的实际用户名):
    engineer ALL=(ALL) NOPASSWD: /sbin/shutdown
    
  • 按Ctrl+O保存,回车确认,再按Ctrl+X退出。

3. 修正脚本的逻辑(你的通知现在是立即弹出的,不符合“关机前1分钟发通知”的需求)

原来的脚本一运行就发送了通知,但你想要的是关机前1分钟才弹出提醒,所以需要把通知任务也交给at调度。替换你的脚本内容为:

#!/bin/bash

# 设置关机时间(2分钟后)
shutdown_time=$(date -d '+2 minutes' +%H:%M)
# 设置通知时间(关机前1分钟,也就是1分钟后)
notification_time=$(date -d '+1 minutes' +%H:%M)

# 调度通知任务到指定时间执行
echo "notify-send 'Shutdown Notification' 'Your computer will shut down in 1 minute at $shutdown_time' -t 60000" | at $notification_time

# 调度关机任务(用sudo获取权限)
echo "sudo /sbin/shutdown -h now" | at $shutdown_time

# 输出提示信息(如果终端打开的话能看到)
echo "Shutdown scheduled at $shutdown_time. Notification will be displayed at $notification_time."

4. 确保atd服务在运行

at命令依赖atd服务才能工作,检查它的状态:

systemctl status atd

如果显示active (running)就没问题;如果没运行,启动它并设置开机自启:

sudo systemctl start atd
sudo systemctl enable atd

三、测试验证

  1. 双击你的 launcher 运行脚本,然后在终端输入atq,你应该能看到两个待执行的任务(一个是通知,一个是关机)。
  2. 等待1分钟,看是否收到通知;再等1分钟,确认电脑是否正常关机。

如果还有问题,可以把.desktop文件的Terminal=false改成true,这样运行时会弹出终端,能看到脚本的输出和错误信息,方便排查。

备注:内容来源于stack exchange,提问作者Web Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 13:15:29