Cron 작업 삭제
이 단계에서는 Ansible Cron 모듈을 사용하여 원치 않는 cron 작업을 제거하는 방법을 배우게 됩니다. cron 작업의 전체 수명 주기를 관리하는 것은 시스템 관리자 및 DevOps 엔지니어에게 중요한 기술입니다.
Cron 작업을 제거하는 이유
cron 작업을 제거해야 하는 몇 가지 이유가 있습니다.
- 예약된 작업이 더 이상 필요하지 않습니다.
- 기존 작업을 새 구성으로 바꾸고 싶습니다.
- 유지 관리성을 향상시키기 위해 시스템을 정리해야 합니다.
- 작업을 일시적으로 비활성화해야 합니다.
Ansible 을 사용하면 인프라 전체에서 체계적이고 반복 가능한 방식으로 cron 작업을 쉽게 제거할 수 있습니다.
State 매개변수 이해
Ansible Cron 모듈은 state 매개변수를 사용하여 cron 작업의 존재 여부를 제어합니다.
state: present - 이것이 기본값입니다. 지정된 구성으로 cron 작업이 존재하도록 합니다.
state: absent - 이 설정은 cron 작업이 존재하지 않도록 하여 이전에 생성된 경우 제거합니다.
Ansible Playbook 수정
첫 번째로 생성한 cron 작업 (이름: my_cron_job) 을 제거하도록 playbook 을 수정해 보겠습니다. WebIDE 에서 /home/labex/project/cron_module_playbook.yaml 파일을 열고 내용을 다음 내용으로 바꿉니다.
- hosts: localhost
tasks:
- name: Remove the cron job
cron:
name: my_cron_job
state: absent
이 playbook 의 주요 요소는 다음과 같습니다.
name: my_cron_job - 제거할 cron 작업을 이름으로 식별합니다.
state: absent - Ansible 에 cron 작업이 존재하지 않도록 지시합니다.
제거할 cron 작업을 식별하기 위해 cron 작업의 이름만 지정하면 됩니다. 다른 매개변수 (분, 시, 작업 등) 는 필요하지 않습니다.
수정된 Playbook 실행
이제 수정된 Ansible playbook 을 실행하여 cron 작업을 제거합니다. 터미널에서 다음 명령을 실행합니다.
cd /home/labex/project
ansible-playbook cron_module_playbook.yaml
다음과 유사한 출력을 볼 수 있습니다.
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Remove the cron job] *****************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
changed: [localhost] 줄은 cron 작업이 성공적으로 제거되었음을 나타냅니다.
Cron 작업 제거 확인
cron 작업이 제거되었는지 확인하려면 시스템의 crontab 을 확인합니다.
crontab -l
이제 출력에 두 번째 cron 작업만 표시됩니다.
#Ansible: custom_cron_job
0 9 * * * /home/labex/project/script.sh
playbook 에서 요청한 대로 my_cron_job 항목이 제거되었습니다.
Ansible 의 멱등성 (Idempotence)
Ansible 의 주요 기능 중 하나는 멱등성 (idempotence) 입니다. 즉, 동일한 작업을 여러 번 적용해도 한 번 적용하는 것과 동일한 결과를 얻는 속성입니다. 이는 cron 작업을 제거하는 것과 같은 작업에 특히 유용합니다.
이를 보여주기 위해 playbook 을 다시 실행해 보겠습니다.
ansible-playbook cron_module_playbook.yaml
다음과 유사한 출력을 볼 수 있습니다.
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Remove the cron job] *****************************************************
ok: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
두 번째 실행에서 제거 작업에 대해 changed 대신 ok가 표시됩니다. 이는 cron 작업이 이미 제거되었으므로 변경 사항이 필요하지 않았기 때문입니다.
여러 Cron 작업 관리
실제 시나리오에서는 단일 playbook 에서 여러 cron 작업을 관리해야 할 수 있습니다. 각자 고유한 구성을 가진 여러 cron 작업을 포함할 수 있습니다.
- hosts: localhost
tasks:
- name: Remove first cron job
cron:
name: job1
state: absent
- name: Create second cron job
cron:
name: job2
minute: "0"
hour: "12"
job: /path/to/script.sh
- name: Update third cron job
cron:
name: job3
minute: "*/10"
job: /path/to/another/script.sh
이 접근 방식을 사용하면 단일 버전 관리 playbook 에서 모든 cron 작업의 전체 수명 주기를 관리할 수 있습니다.
축하합니다! Ansible Cron 모듈을 사용하여 cron 작업을 제거하는 방법을 성공적으로 배웠습니다. 이는 cron 작업의 기본 수명 주기 관리 (생성, 수정 및 제거) 를 완료합니다.