首页 > 其他分享 >Ansible系统-模块-cron学习整理

Ansible系统-模块-cron学习整理

时间:2023-05-29 17:32:45浏览次数:38  
标签:name ansible crontab cron etc Ansible 模块 root

1、常规性用法

ansible test-xxxx-01-vm -m cron -a 'minute=30 hour=15 name="ansible crontab demo" job="bash /tmp/1.sh" '

默认是写到 root 用户的 crontab中去,可以通过如下两种方式查看写入结果

1)登录到目标主机,切换到对应的用户执行如下命令

crontab -l -u username

比如上面的 username 是root,就可以是 crontab -l [-u root] ,当然如果是查看当前用户的crontab 就不用使用 -u 选项

2)登录到目标主机,使用root用户执行如下命令

cat /var/spool/cron/username

上面的username是Linux主机上的有效用户, 比如使用 ansible 写入到 james 用户的crontab中去

ansible test-xxxx-01-vm -m cron -a 'minute=30 hour=15 name="ansible crontab demo" job="bash /tmp/1.sh" user="james"'

2、写入到 /etc/crontab

按照ansible 官方文档介绍,需要使用 cron_file 选项,配置成绝对路径的文件,所以一般配置成 /etc/crontab 即可

ansible test-xxxx-01-vm -m cron -a 'minute=30 hour=15 name="ansible crontab demo" job="bash /tmp/1.sh" cron_file="/etc/crontab" user=root state=absent'

test-xxxx-01-vm | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "cron_file": "/etc/crontab",
    "envs": [
        "SHELL",
        "PATH",
        "LANG",
        "MAILTO"
    ],
    "jobs": [
        "collect_netstat_ctl",
        "ansible crontab demo"
    ]
}

注意:使用 cron_file 选项的时候,比如要同步使用 user 选项,不然会有如下报错

"msg": "To use cron_file=... parameter you must specify user=... as well"

这个时候,执行执行 cat /etc/crontab 就能看到新增的定时任务

[root@test-xxxx-01-vm ~ Thu May 18 15:44:49]# cat /etc/crontab |tail -2
#Ansible: ansible crontab demo
30 15 * * * root bash /tmp/1.sh

3、写入到 /etc/cron.d 下的独立文件

核心还是使用 cron_file 配置选项,记得同时要用 user 配置选项哦

ansible test-xxxx-01-vm -m cron -a 'minute=30 hour=15 name="ansible crontab demo" job="bash /tmp/1.sh" cron_file="lcdemo" user=root'

test-xxxx-01-vm | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "cron_file": "lcdemo",
    "envs": [],
    "jobs": [
        "ansible crontab demo"
    ]
}

验证写入是否成功

[root@test-xxxx-01-vm ~ ]# ls -l /etc/cron.d/lcdemo
-rw-r--r-- 1 root root 63 May 18 15:47 /etc/cron.d/lcdemo

[root@test-xxxx-01-vm ~ ]# cat /etc/cron.d/lcdemo
#Ansible: ansible crontab demo
30 15 * * * root bash /tmp/1.sh

扩展

1、关于 cron 模块的的配置项说明

  • • minute/hour/month/year/weekday 就是设置任务执行的时间规则,用法就是Linux 下crontab的用法
  • • cron_file 是任务写入到具体的问文件中,需要 user 配置项一起使用
  • • user/job/name 给指定用户设定定时任务job, 任务的名称是 name
  • • state 值有 present/absent两个,分别表示新增、删除定时任务

有两个特殊的配置项需要说明:

  • • special_time 指定一些特殊事件时触发任务,比如reboot 是主机重启的时候,weekly 是每周执行一次
  • • job 常规是配置的任务,但是如果在使用了 env=yes 的时候,job的值是 name指定的变量的值

具体的配置项介绍可以参考官网说明: https://docs.ansible.com/ansible/2.9/modules/cron_module.html#cron-module

2、给相关crontab文件添加变量

核心是利用 env 配置项,这是按照playbook的进行配置,结果请自行验证哦

---
- hosts: test-xxxx-01-vm
  tasks:
    - name: Creates an entry like "LCVAR=lcval" on top of crontab
      cron:
        name: LCVAR
        env: yes
        job: lcval
        
    - name: Creates an entry like "LCVARV2=ansible-alias" on top of crontab
      cron:
        name: LCVARV2
        env: yes
        value: lcvalv2
        
    - name: Creates an entry like "LCVARV3=lcvalv3" and insert it after LCVARV1 declaration
      cron:
        name: LCVARV3
        env: yes
        value: lcvalv3
        insertafter: LCVARV1

上述执行的结果是在root用户的crontab中(/var/spool/cron/root) 中新增三个变量且分别给定了变量的值。

特殊的是:

  • • name 变量对应的值,可以使用job 或者 value 来制定
  • • insertafter/insertbefore 是在 指定的变量的后面、前面 插入新增的变量

3、使用 lineinfile 模块添加crnotab 定时任务

除了第一趴介绍的使用 cron_file="/etc/crontab" 往该文件中配置定时任务之外,其实也可以使用 lineinfile 模块,实现如下

- name: set crontab for tan create-index.html
  lineinfile:
    path: /etc/crontab
    line: "#Ansible: tan create index.html\n*/30 * * * * root php-5.6 /data/project/store/bin/cli request_uri='/Cli/System/createTanIndex'"
  tags:
    - crontab

这里只是告诉你一种额外的方法,但是crontab 配置还是建议使用 cron 模块


今天的学习就分享都这里,感觉喜欢改分享的,可以关注个人微信公众号 搜 DailyJobOps 或者 全栈运维

Ansible系统-模块-cron学习整理_定时任务

DailyJobOps

标签:name,ansible,crontab,cron,etc,Ansible,模块,root
From: https://blog.51cto.com/colinspace/6373229

相关文章

  • 【Quectel】EC20CEFHLG-128-SNNS物联网 LTE Cat 4 无线通信模块
    产品介绍:EC20是移远通信推出的LTE模块,采用LTE3GPPRel.9技术,支持下行速率100Mbps和上行速率50Mbps,同时在封装上兼容移远通信UMTS/HSPA+UC20模块,实现了从3G网络向4G网络轻松平滑过渡。EC20系列模块包含EC20-A,EC20-C和EC20-E三个版本,使其能够向后兼容现存的EDGE和GSM/GPRS网络,以......
  • python:yaml模块
    python:yaml模块https://www.jianshu.com/p/eaa1bf01b3a6https://www.runoob.com/w3cnote/yaml-intro.html......
  • Node模块导入规则总结
    @目录node模块总结node模块引入的步骤:模块分类node支持的模块系统ESModuleCommonJS模块加载CommonJS模块引入路径分析文件定位带扩展名的文件定位不带扩展名的文件定位ESM模块引入路径分析文件定位带路径不带路径(裸说明符)模块加载器总结对比CommonJS模块加载器ECMAScript模块加......
  • Django用户认证组件 (auth模块)
    1、导入auth模块#认证模块fromdjango.contribimportauth#对应数据库用户表,可以继承扩展fromdjango.contrib.auth.modelsimportUser2、创建用户对象create():创建一个普通用户,密码是明文的。create_user():创建一个普通用户,密码是密文的。create_superu......
  • 注意力模块
    注意力模块空间注意力模块对特征图每个位置进行attention调整,(x,y)二维调整,使模型关注到值得更多关注的区域上。对于卷积神经网络,CNN每一层都会输出一个CxHxW的特征图,C就是通道,同时也代表卷积核的数量,亦为特征的数量,H和W就是原始图片经过压缩后的图的高度和宽度,而空间注意......
  • ESP8266WiFi模块与Android实现数据通信
    ESP8266模块三种模式:    1、STA模式(客户端模式):ESP8266模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制    2、AP模式(接入点模式):ESP8266模块作为热点,手机或电脑直接与模块连接,实现局域网无线控制    3、STA+AP模式(两种模式并存):ESP826......
  • CentOS 9 安装 Nginx 模块 `subs_filter`
    sub_filter和subs_filter区别sub_filter(0.7.24):替换响应体(ResponseBody)中的文本,只能设置一组替换。subs_filter:替换响应体(ResponseBody)和响应头(ResponseHeaders)中的文本,可以设置多组替换。sub_filter使用案例:http{server{listen80;server_n......
  • CentOS 9 安装 Nginx 模块 `subs_filter`
    sub_filter和subs_filter区别sub_filter(0.7.24):替换响应体(ResponseBody)中的文本,只能设置一组替换。subs_filter:替换响应体(ResponseBody)和响应头(ResponseHeaders)中的文本,可以设置多组替换。sub_filter使用案例:http{server{listen80;server_......
  • IDEA中创建java多模块项目和打包
    文章来源:https://www.jb51.net/article/210892.htm#_label7   非常感谢。一、使用springinitializr创建java工程1、启动IDEA,新建java工程,使用向导创建一个springboot框架的工程 2.设置项目信息,java版本选择8 3、勾选项目需要用到的依赖 4、设置项目名称,点击......
  • OverTheWire攻关过程-Bandit模块29
    我们打开lv28-lv29,查看信息机器翻译有一个git仓库在ssh://bandit28-git@localhost/home/bandit28-git/repo经由端口2220。用户bandit28-git的密码与用户bandit28的密码相同。克隆存储库并找到下一级别的密码。您可能需要解决此级别的命令git的我们登陆服务器没有文件git拉取到本......