我的问题是当我的电脑启动时我想用下面的命令禁用 mysql 服务
sudo service mysql stop || service mysql stop
在这两种情况下,系统都要求输入系统密码,所以我每次都手动输入密码
我使用上述命令创建一个 .sh 文件
那么,如何使用上述脚本设置并传递我的系统密码,以便在每次运行该脚本时不要输入密码。
答案1
更好/更安全的替代方案是:
禁用该
mysql.service
单元如下systemd
:sudo systemctl disable mysql.service
这样,Mysql服务器就不会在启动时自动启动,而是可以在需要时随时手动启动。
将您的命令添加到
root
crontab 中以便在启动后运行,如下所示:sudo crontab -e
systemd
然后,使用的服务操作添加一行,如下所示:@reboot sleep 20 && /usr/bin/systemctl stop mysql.service
或者
/etc/init.d/mysql
像这样使用:@reboot sleep 20 && /etc/init.d/mysql stop
或者,甚至
/usr/sbin/service
像这样使用:@reboot sleep 20 && /usr/sbin/service mysql stop
请注意,在 crontab 中使用可执行文件的完整路径是一个很好的措施,并且添加调用
sleep
以延迟执行,直到服务启动并响应。
然而,sudo
有一个-S, --stdin
选项:
-S,--标准输入 将提示写入标准错误并从中读取密码 标准输入而不是使用终端设备。
可以像这样使用:
echo 'PASSWORD' | /usr/bin/sudo --stdin /usr/bin/systemctl stop mysql.service
或者像这样:
echo 'PASSWORD' | /usr/bin/sudo --stdin /etc/init.d/mysql stop
或者像这样:
echo 'PASSWORD' | /usr/bin/sudo --stdin /usr/sbin/service mysql stop
但是,不建议使用此方法,因为它会以纯文本形式保存和传递您的密码,更不用说此方法所涉及的其他安全隐患。
还要注意的是,sudo
如果您的命令嵌套了||
、&&
或;
操作符/分隔符,则在每个命令需要时,您需要sudo
在这些分隔符的两侧使用 ,否则,命令前没有 的一侧sudo
将以普通用户权限执行,并且不是超级用户权限。
答案2
为了避免每次运行脚本时都必须输入系统密码,您可以使用 sudoers 文件授予用户无需输入密码即可执行 sudo 命令的权限。
您可以按照以下步骤操作:
使用 visudo 命令打开 sudoers 文件:
sudo visudo
在文件末尾添加以下行,将用户名替换为您的实际用户名:
username ALL=(ALL) NOPASSWD: /usr/sbin/service mysql stop
此行授予用户以超级用户身份执行 service mysql stop 命令的权限,而无需输入密码。
保存并退出文件。使用此配置,当您运行脚本时,命令sudo
将不会要求输入密码,并且脚本将能够在没有任何手动干预的情况下停止 MySQL 服务。