在 WSL2(适用于 Linux 的 Windows 子系统)上使用 Ubuntu 20.04(focal)作为 LAMP-stack/WordPress 开发环境。
由于所需的服务不会在 Windows 10(主/父操作系统)启动时自动运行,因此我创建了一个/start
文件来调用 start on openssl
、apache
和mysql
echo 确认语句。它看起来就像这个代码块。
#!/bin/sh
service ssh start
service mysql start
service apache2 start
echo "System ready."
现在,当我打开bash
终端时,我只需使用sudo -s
切换到 root 并调用/start
。输出如下所示。
focal@DESKTOP-6FLTF67:~$ sudo -s
[sudo] password for focal:
root@DESKTOP-6FLTF67:/home/focal# /start
* Starting OpenBSD Secure Shell server sshd [ OK ]
* Starting MySQL database server mysqld [ OK ]
* Starting Apache httpd web server apache2
*
System ready.
root@DESKTOP-6FLTF67:/home/focal#
如何让此功能用于服务重启和关闭。是否允许配置这些命令?由于服务的放置顺序无关紧要,因此当我保存/restart
或/stop
文件并运行它时,我总是收到此错误。
focal@DESKTOP-6FLTF67:~$ sudo -s
root@DESKTOP-6FLTF67:/home/focal# /start
* Starting OpenBSD Secure Shell server sshd [ OK ]
* Starting MySQL database server mysqld [ OK ]
* Starting Apache httpd web server apache2
*
System ready.
*
root@DESKTOP-6FLTF67:/home/focal# /stop
bash: /stop: Permission denied
*
root@DESKTOP-6FLTF67:/home/focal# /restart
bash: /restart: Permission denied
*
root@DESKTOP-6FLTF67:/home/focal# /stop
bash: /stop: Permission denied
我已经尝试了在关闭一个服务之前/之后关闭另一个服务等所有方法,并且已经根据工作/start
版本仔细检查了文件,它们似乎都没有问题。
有人能帮我理解我所缺少的东西吗?提前谢谢您!
答案1
在读完一篇较长的SO 讨论由类似的问题引发的思考,我终于明白了我所经历的行为背后的“为什么”。
这就是答案。
在上述评论中@muru 提出了一些尖锐的问题之后,我才意识到,虽然我已经将其包含#!/bin/sh
在每个文件的顶部,但我还没有运行chmod +x $filename.sh
以使文件(程序)完全可执行。
因此,拨打sh ./stop.sh
或拨打bash ./stop.sh
电话都可以,但我尝试./stop.sh
直接拨打电话,但没有成功。
以下是解决方案的前后视图。
示例脚本 ~/run.sh
#!/bin/sh
service ssh start
service mysql start
service apache2 start
echo "This version works too"
前(这是我原来遇到的情况。)
❯ sudo sh ./run.sh
* Starting OpenBSD Secure Shell server sshd [ OK ]
* Starting MySQL database server mysqld [ OK ]
* Starting Apache httpd web server apache2
*
This version works too
❯ sudo ./run.sh
sudo: ./run.sh: command not found
后(跑步后sudo chmod +x run.sh
)
❯ sudo ./run.sh
* Starting OpenBSD Secure Shell server sshd [ OK ]
* Starting MySQL database server mysqld [ OK ]
* Starting Apache httpd web server apache2
*
This version works too
如您所见,只有在使用 使脚本可执行后才能获得预期的结果chmod +x run.sh
。
注意:此外,我建议
sudo
尽可能使用 来运行脚本,而不是root
像我在原始问题中那样使用。更安全的选择是从属于该sudoers
组的用户帐户中运行这些命令,这有助于限制直接使用时产生的安全性和用户错误问题root
。