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
三、测试验证
- 双击你的 launcher 运行脚本,然后在终端输入
atq,你应该能看到两个待执行的任务(一个是通知,一个是关机)。 - 等待1分钟,看是否收到通知;再等1分钟,确认电脑是否正常关机。
如果还有问题,可以把.desktop文件的Terminal=false改成true,这样运行时会弹出终端,能看到脚本的输出和错误信息,方便排查。
备注:内容来源于stack exchange,提问作者Web Developer
相关产品推荐
相关产品推荐

