Linux Mint下MySQL/Apache2启停切换Bash脚本故障及免密需求咨询
服务启停切换脚本优化与免密执行方案
一、修复后的服务切换脚本
你原来的脚本用ps grep判断服务状态容易误判(比如存在mysql相关的其他进程时会导致判断错误),改用systemctl is-active能准确识别systemd管理的服务状态,同时让脚本支持灵活切换服务(mysql或apache2):
#!/bin/bash # 可修改此处的服务名,替换为apache2即可控制对应服务 SERVICE="mysql" # 获取服务当前状态 STATUS=$(systemctl is-active "$SERVICE") if [ "$STATUS" = "active" ]; then # 服务运行中,执行停止操作 sudo systemctl stop "$SERVICE" # 再次检查状态确认结果 if systemctl is-active --quiet "$SERVICE"; then echo "错误:$SERVICE 服务停止失败" else echo "$SERVICE 服务已停止" fi else # 服务未运行,执行启动操作 sudo systemctl start "$SERVICE" # 检查启动结果 if systemctl is-active --quiet "$SERVICE"; then echo "$SERVICE 服务已启动" else echo "错误:$SERVICE 服务启动失败" fi fi
脚本说明
- 用
systemctl is-active替代ps grep,完全基于systemd的服务状态判断,避免误判 --quiet参数让状态检查命令只返回退出码,不输出冗余内容- 统一用
SERVICE变量管理服务名,修改时只需改一处 - 加入
sudo调用systemctl,普通用户默认无服务操作权限,必须通过sudo执行
二、解决systemctl密码提示问题(禁止硬编码密码)
绝对不要在脚本里直接写密码,这会导致密码泄露,风险极高。正确的做法是配置sudo免密权限:
- 打开sudoers配置文件(必须用
visudo,防止语法错误破坏sudo功能):
sudo visudo
- 在文件末尾添加一行(把
your_username替换成你的实际用户名):
your_username ALL=(ALL) NOPASSWD: /usr/bin/systemctl start mysql, /usr/bin/systemctl stop mysql, /usr/bin/systemctl start apache2, /usr/bin/systemctl stop apache2
- 保存退出:在visudo界面按
Ctrl+O,回车确认保存,再按Ctrl+X退出
配置完成后,你的用户执行指定的systemctl命令时就无需输入密码,既安全又能实现脚本无交互运行。
脚本使用步骤
- 将脚本保存为
service_toggle.sh - 赋予执行权限:
chmod +x service_toggle.sh
- 运行脚本:
./service_toggle.sh
需要控制apache2时,修改脚本里的SERVICE="apache2"即可。
内容的提问来源于stack exchange,提问作者M Abraham
相关产品推荐
相关产品推荐

