繁体   English   中英

用Ansible升级已安装软件包的正确方法是什么

[英]What is the proper way to upgrade installed packages with Ansible

假设我有下一个简单的Ansible剧本:

---
  tasks:
    - name: Upgrade installed packages
      become: true
      apt:
        upgrade: safe

    - name: Install NGINX web server
      become: true
      apt:
        name: nginx
        state: latest
      notify:
        - Restart NGINX

  handlers:
    - name: Restart NGINX
      become: true
      service:
        name: nginx
        state: restarted

如您所见,我首先升级已安装的APT软件包,然后再确保我具有最新的Nginx版本。 问题是,如果有Nginx的更新,它将被安装在第一个任务中,如果是的话,第二个任务将不会被标记为已更改,并且不会触发处理程序。 是真的吗 还是只有在第一个任务中升级了Nginx时,Ansible才足够聪明地以某种方式触发此句柄?

我想知道这种情况下的最佳做法。 有没有比升级所有已安装软件包的任务之前移动所有单独的安装任务(应该在更改时触发处理程序)更好的方法了?

谢谢!

这不是“ Ansible方式”,而是一种选择。

为什么可以这样做是通过使用lsof查找所有需要重新启动的pid并将此信息传递给systemd以获得每个pid的服务名称。 然后遍历服务列表,然后重新启动每个服务。

所有人都准备好编写这样的perl脚本 -参见此处的示例: https : //rwmj.wordpress.com/2014/07/10/which-services-need-restarting-after-an-upgrade/

另一个选择是,但相同的是debian-goodies repo / package中的restart-services脚本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM