Ansible playbook для просмотра cron на удаленных серверах
Написал небольшой playbook для копирования задач крон в отдельный файл на серверах.
- name: crontab jobs list on all servers
hosts: all
become: yes
vars:
file: /var/log.txt
tasks:
- name:
shell: "echo '########################################' >> {{ file }} && echo server_name: {{ ansible_hostname }} >> {{ file }} && echo server_ip: {{ ansible_all_ipv4_addresses }} >> {{ file }} && crontab -l >> {{ file }}; crontab -l 2>> {{ file }}
Все работает, но криво - хотелось бы иметь отдельный файл на сервере ansible со всеми задачами cron.
Добавил в плейбук
tasks:
- name:
shell: "echo '########################################' >> {{ file }} && echo server_name: {{ ansible_hostname }} >> {{ file }} && echo server_ip: {{ ansible_all_ipv4_addresses }} >> {{ file }} && crontab -l >> {{ file }}; crontab -l 2>> {{ file }}
delegate_to: 127.0.0.1
Файл создался, но почему-то все значения - no crontab for root, хотя на одном сервере были задачи в cron.
root@lab:/home/user# cat /var/log.txt
########################################
server_name: lab
server_ip: [10.0.2.15, 172.16.22.221]
no crontab for root
########################################
server_name: 10
server_ip: [10.0.2.15, 172.16.22.224]
no crontab for root
########################################
server_name: lab2
server_ip: [172.16.22.223, 10.0.2.15]
no crontab for root
Помогите разобраться в чем причина.
Ответы (1 шт):
Потому что crontab -l показывает только задачи которые добавленны через crontab -e
Хранятся они в /var/spool/cron/crontabs/, там есть списки и для других пользователей. Дергай через
cat /var/spool/cron/crontabs/*
Системный /etc/crontab и /etc/cron.d/ там не отображаются. Тоже проще через cat
cat /etc/crontab
cat /etc/cron.d/*
Вместо звездочки напиши цикл чтоб имена файлов указать:
for i in /etc/cron.d/*
do
echo Файл "$i"
cat "$i"
done
Следует заглянуть ещё через ls
ls /etc/cron.daily/ /etc/cron.hourly/ /etc/cron.monthly/ /etc/cron.weekly/