DockerでAnsibleを使ってcronを設定する
- はじめに
- フォルダ構成
- cron の設定内容
- Docker コンテナの起動
- inventory.ini の変更
- playbook.yml の実行
- cron ファイルの確認
- cron の動作確認
- cron の実行ログ
- 参考資料
フォルダ構成
C:\docker\ansible-cron\ │ docker-compose.yml │ inventry.ini │ playbook.yml │ ├─ansible\ │ Dockerfile │ └─target\ │ Dockerfile │ └─home\
cron の設定内容
Ansible を使うため playbook.yml に cron の設定内容を記載しています。
1分間隔で /var/log/test.log に test の文字列を追記することにしました。
- hosts: target tasks: - name: "setup cron" cron: name: "create log" minute: "*" hour: "*" day: "*" job: "echo 'test' >> /var/log/test.log"
Docker コンテナの起動
# docker-compose.yml のディレクトリに移動 $cd C:\docker\ansible-cron\ # コンテナの起動 $docker compose up -d --build
inventory.ini の変更
Ansibleからcronの設定を行うコンテナのIPアドレスを inventory.ini に入力します。
今回は 192.168.16.2 と記載していますが、環境に合わせて変更が必要です。
[target] 192.168.16.2 [target:var] ansible_python_interpreter=/usr/bin/python3
コンテナのIPアドレスは内部で起動しているUbuntuに接続すると確認できます。
# target コンテナに接続 $docker exec -it target bash # IPアドレスの確認 $hostname -i
playbook.yml の実行
ansible のコンテナに接続してAnsibleから cron の設定を行います。
今回SSH接続のパスワードは password としています。
# ansible コンテナに接続 $docker exec -it ansible bash # Ansibleから cron の設定 $ansible-playbook -i inventry.ini playbook.yml --ask-pass SSH password: PLAY [target] ******************************************************************************************************************************************************************* TASK [Gathering Facts] ********************************************************************************************************************************************************** ok: [192.168.16.2] TASK [setup cron] *************************************************************************************************************************************************************** changed: [192.168.16.2] PLAY RECAP ********************************************************************************************************************************************************************** 192.168.16.2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
cron ファイルの確認
今回設定した内容は root のファイル名で記載されています。
$cat /var/spool/cron/crontabs/root # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/tmp/crontab2yp2i8ru installed on Sun Jul 18 14:24:59 2021) # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) #Ansible: create log * * * * * echo 'test' >> /var/log/test.log
cron の動作確認
1分間隔で文字列が追記されていることを確認します。
$cat /var/log/test.log test test test
cron の実行ログ
デバックをする際に使用したので忘備録として残します。
rsyslog の設定ファイルから cron の実行ログを残すように変更を行います。
# rsyslog の設定を変更 $vi /etc/rsyslog.d/50-default.conf # コメントアウトを外す cron.* /var/log/cron.log
設定を反映させるために rsyslog のサービスを再起動します。
$service rsyslog restart
cron の実行ログは /var/log/cron.log から確認できます。
$cat /var/log/cron.log Jul 18 14:25:01 7a07b9e45953 CRON[554]: (root) CMD (echo 'test' >> /var/log/test.log) Jul 18 14:26:01 7a07b9e45953 CRON[567]: (root) CMD (echo 'test' >> /var/log/test.log) Jul 18 14:27:01 7a07b9e45953 CRON[569]: (root) CMD (echo 'test' >> /var/log/test.log)