はじめに
crontabの設定を実施するansible-playbookです
取り急ぎスクリプトを定期実行させたい場合を想定しています
異常時はreturn codeで判別することにして、cronのログにreturn codeを出力させます
前提
ansible-playbookの簡単な使い方はわかる前提で記載しています
- 環境
- Ubuntu 20.04
ファイル構成
L group_vars
- cron_server.yml
- cron_server_playbook.yml
- hosts
group_vars/cron_server.yml
以下の2つの設定を書いています
- rsyslogの設定でcronのログを出力する設定
- return codeが0以外のときにログに出力するためにログレベルの記載
---
# /etc/rsyslog.d/50-default.conf
default_conf_50:
- parameter: "#cron"
value: "cron.* /var/log/cron.log"
# /etc/default/cron
cron_loglevel: "EXTRA_OPTS='-L 15'"
hosts
IPアドレスは導入するサーバの値を指定します
[cron_server]
aaa.bbb.ccc.ddd
cron_server_playbook.yml
やっていることは、以下の3つです
- rsyslogの設定を変更しcron実行時のログを出力させ、rsyslogサービスを再起動
- 出力するログレベルを設定、crontabを再起動
- crontabに1日1回のジョブと5分間隔のジョブを登録する(crontab -e 相当の操作)
- name: crontab configure
hosts: cron_server
tasks:
- name: configure rsyslog
become: true
lineinfile:
dest: "/etc/rsyslog.d/50-default.conf"
line: "{{ item.value }}"
regexp: "^{{ item.parameter }}"
create: yes
loop: "{{ default_conf_50 }}"
loop_control:
label: "{{ item.parameter }}"
- name: restart rsyslog
become: true
systemd:
name: rsyslog
state: restarted
enabled: yes
- name: configure cron logging
become: true
lineinfile:
dest: "/etc/default/cron"
line: "{{ cron_loglevel }}"
- name: restart crontab
become: true
systemd:
name: cron
state: restarted
enabled: yes
- name: setting crontab(daily)
cron:
name: "cron_name"
user: "ubuntu"
minute: "15"
hour: "01"
job: "echo abc"
- name: setting crontab(5m interval)
cron:
name: "cron_name"
user: "ubuntu"
minute: "*/5"
job: "echo abcdefg"
おわりに
説明不足だと思いますので不明な点があればコメントいただければわかる範囲で追記します