在 WSL2(Linux 的 Windows 子系统)上使用 Ubuntu 20.04(焦点)作为 LAMP-stack/WordPress 开发环境。
由于所需的服务不会在 Windows 10(主/父操作系统)启动时自动运行,因此我创建了一个/start
文件来调用 start on openssl
、apache
和mysql
并回显确认语句。它看起来就像这个代码块。
#!/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
版本仔细检查了文件,它们似乎很好。
有人可以帮助我了解我所缺少的吗?先感谢您!
在阅读了由类似问题引发的更长的SO 讨论之后,我终于明白了我所经历的行为背后的“原因”。
所以这就是答案。
在上面的评论中@muru 提出了一些尖锐的问题之后,我突然意识到,虽然我已将
#!/bin/sh
每个文件的顶部包含在内,但我并没有运行chmod +x $filename.sh
以使文件(程序)完全可执行。因此,调用
sh ./stop.sh
或bash ./stop.sh
工作正常,但我试图./stop.sh
直接调用,但没有。这是解决方案的前后视图。
示例脚本
~/run.sh
之前(这是我最初遇到的。)
之后(运行后
sudo chmod +x run.sh
)如您所见,只有在使用
chmod +x run.sh
.