【问题标题】:Ansible Playbook to run Shell commandsAnsible Playbook 运行 Shell 命令
【发布时间】:2013-12-09 06:56:27
【问题描述】:

我最近为我的一台服务器深入研究了 Ansible,发现它非常有趣且节省时间。我正在运行一个 Ubuntu 专用服务器,并配置了一些用 Python 编写的 Web 应用程序和一些用 PHP 编写的 Web 应用程序。 对于 Python,我使用 uwsgi 作为 HTTP 网关。我编写了 shell 脚本来启动/重新启动一些进程,以便运行特定 Web 应用程序的实例。 我每次都要做的是,连接 ssh 并导航到该特定应用程序并运行脚本。

我需要什么

我一直在尝试找到一种方法来编写 Ansible 剧本,以便在我的个人计算机上使用一行命令来完成所有这些工作,但我不知道该怎么做。我没有在互联网上找到非常解释性(对于初学者)的文档或帮助。

问题

如何使用 Ansible playbook 重启 Nginx? 如何通过进程 ID 杀死进程?

【问题讨论】:

    标签: shell nginx ansible uwsgi ansible-playbook


    【解决方案1】:

    你甚至不需要一本剧本就可以做到这一点:

    • 重启nginx:

    ansible your_host -m service -a 'name=nginx state=restarted'

    (见service module

    • 按进程 ID 终止进程

    ansible your_host -m command -a 'kill -TERM your_pid'

    (调整信号,如果需要匹配名称,请使用 pkill/killall;参见command module

    但是,如果您只是将 ansible 用于临时命令,我不会说它大放异彩。

    如果您需要一个教程来帮助您开始使用 playbook,这里有一个 over here

    现在,如果您可以将这些(服务、命令等的正式名称为 modules)放入剧本(我们称之为 playbook.yml),您可以:

    - hosts: webappserver
      tasks:
        - name: Stops whatever
          command: kill -TERM your_pid
          notify:
            - Restart nginx
    
        - name: Another task
          command: echo "Do whatever you want to"
    
      handlers:
        - name: Restart nginx
          service: name=nginx state=restarted
    

    创建一个清单文件 (hosts),其中包含:

    # webappserver should resolve !
    webappserver
    

    调用:

    ansible playbook.yml -i hosts
    

    它应该可以工作。

    这都是非常基础的,可以通过阅读文档或任何教程轻松掌握。

    【讨论】:

    • 我不是在谈论临时命令。重新启动项目实例时,我的 shell 脚本按 id 终止进程,然后再次启动该进程并清除应用程序生成的所有日志。我需要知道,是否可以通过使用 ssh 和 bla bla bla 登录服务器来避免每次我想重新启动实例时都运行该 shell 脚本。
    • 是的。我提到的命令可以放在剧本中。请参阅编辑后的答案。
    • 感谢您的帮助,我们会在几个小时内回复您
    • 不错!祝 Ansible 好运,太棒了!
    猜你喜欢
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多