如何配置脚本文件来管理 Ubuntu 上的服务而不使用 bash?

如何配置脚本文件来管理 Ubuntu 上的服务而不使用 bash?

在 WSL2(适用于 Linux 的 Windows 子系统)上使用 Ubuntu 20.04(focal)作为 LAMP-stack/WordPress 开发环境。

由于所需的服务不会在 Windows 10(主/父操作系统)启动时自动运行,因此我创建了一个/start文件来调用 start on opensslapachemysqlecho 确认语句。它看起来就像这个代码块。

    #!/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

相关内容