Ansible 通过 systemd 模块声明式管理服务生命周期(启动、停止、启用开机自启、重启、重载),推荐用于现代 Linux;旧系统可用 service 模块;cron 任务用 ansible.posix.cron 管理;自定义脚本用 nohup+async 启动并 pgrep 验证。

用 Ansible 自动化管理系统进程,核心是把“启动、停止、启用开机自启、重启、重载配置”这些操作变成可重复、可验证、可批量执行的声明式任务。它不依赖手动 systemctl 命令,而是通过模块精准控制服务状态和持久性。
用 systemd 模块管理服务生命周期
这是最常用也最推荐的方式,适用于 CentOS/RHEL 7+ 及大多数现代 Linux 发行版。
-
启动并设为开机自启:使用
ansible.builtin.systemd模块,state: started+enabled: true -
仅启用但不启动:设
state: stopped,enabled: true,适合预配置待后续触发 -
重启服务并重载配置:设
state: restarted;若需先重载再重启(如 httpd),可分两步:daemon_reload: yes后跟state: restarted -
检查服务是否运行中:加
state: started并配合ignore_errors: no,失败即报错,可用于健康检查
用 service 模块兼容旧系统或特殊场景
在较老的 CentOS 6 或某些定制化 init 系统中,ansible.builtin.service 仍有效,语法类似:
-
name: nginx、state: restarted、enabled: yes - 注意:
service模块不支持daemon_reload,也不识别 systemd 特有特性(如 target 切换) - 建议新项目统一用
systemd模块,保持行为一致
自动化定时任务(Cron)管理
避免手工编辑 crontab,用 ansible.posix.cron 模块统一纳管:
-
添加计划任务:指定
user、minute、hour、job,并给name赋唯一标识(如"daily backup") -
删除某项任务:设
state: absent,Ansible 会根据name精准匹配并移除 -
禁用而非删除:用
disabled: yes,保留条目但注释掉,便于快速恢复 - 所有操作自动幂等,重复运行不会出错或产生冗余条目
后台长期运行脚本的可靠启动
对于非 systemd 托管的自定义脚本(如 Python 服务),需确保其脱离 Ansible 连接后持续运行:
-
用 nohup + &:在
ansible.builtin.shell中写nohup /path/to/script.py > /var/log/myapp.log 2>&1 & -
配合 async 异步执行:设
async: 300(秒)和poll: 0,让 Ansible 启动后立即返回,不等待脚本结束 -
验证进程存在:后续加 task 用
ansible.builtin.command: pgrep -f "script.py"检查 PID,失败则报错

















