Почему “crontab -l” не показывает все задачи?

Вопрос или проблема

Я добавил следующее в /etc/crontab на моей системе Linux:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# Подробности см. в руководстве man 4 crontabs

# Пример определения задания:
# .---------------- минута (0 - 59)
# |  .------------- час (0 - 23)
# |  |  .---------- день месяца (1 - 31)
# |  |  |  .------- месяц (1 - 12) ИЛИ jan,feb,mar,apr ...
# |  |  |  |  .---- день недели (0 - 6) (Воскресенье=0 или 7) ИЛИ sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * имя_пользователя  команда для выполнения
0 0 */1 * * root chmod +x /root/source/auto-renew.sh && /root/source/auto-renew.sh >> /root/source/auto-renew-cron.log 2>&1

Однако, когда я запускаю crontab -l, это задание crontab не отображается:

[root@iZm5e2jhfbrshckqh6qdbuZ cron.d]# crontab -l
45 6 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

Почему crontab -l не показывает задание из /etc/crontab?

Вот журнал:

[root@iZm5e2jhfbrshckqh6qdbuZ cron.d]# journalctl -u crond
-- Логи начинаются с Шу 2024-11-20 15:32:06 CST, заканчиваются Шу 2025-01-01 13:54:30 CST. --
Nov 20 16:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1444408]: (root) CMD (run-parts /etc/cron.hourly)
Nov 20 17:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1486477]: (root) CMD (run-parts /etc/cron.hourly)
Nov 20 18:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1528604]: (root) CMD (run-parts /etc/cron.hourly)
Nov 20 19:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1570709]: (root) CMD (run-parts /etc/cron.hourly)
Nov 20 20:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1612872]: (root) CMD (run-parts /etc/cron.hourly)
Nov 20 21:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1655340]: (root) CMD (run-parts /etc/cron.hourly)
Nov 20 22:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1697643]: (root) CMD (run-parts /etc/cron.hourly)
Nov 20 23:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1739698]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 00:00:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1781104]: (root) CMD (chmod +x /root/source/auto-renew.sh && /root/source/auto-renew.sh >> /root/source/auto-renew-cron.log 2>&1)
Nov 21 00:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1781971]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 00:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1781980]: Anacron начал работу 2024-11-21
Nov 21 00:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1781980]: Нормальное завершение (0 заданий выполнено)
Nov 21 01:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1824103]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 01:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1824112]: Anacron начал работу 2024-11-21
Nov 21 01:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1824112]: Нормальное завершение (0 заданий выполнено)
Nov 21 02:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1866166]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 02:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1866175]: Anacron начал работу 2024-11-21
Nov 21 02:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1866175]: Нормальное завершение (0 заданий выполнено)
Nov 21 03:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1908181]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 03:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1908190]: Anacron начал работу 2024-11-21
Nov 21 03:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1908190]: Задание `cron.daily` будет выполнено через 50 мин.
Nov 21 03:01:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1908190]: Задания будут выполняться поочередно
Nov 21 03:51:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1908190]: Задание `cron.daily` начато
Nov 21 03:51:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1908190]: Задание `cron.daily` завершено
Nov 21 03:51:01 iZm5e2jhfbrshckqh6qdbuZ anacron[1908190]: Нормальное завершение (1 задание выполнено)
Nov 21 04:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1950218]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 05:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[1992303]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 06:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[2034382]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 07:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[2076636]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 08:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[2118744]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 09:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[2160824]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 10:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[2203126]: (root) CMD (run-parts /etc/cron.hourly)
Nov 21 11:01:01 iZm5e2jhfbrshckqh6qdbuZ CROND[2245206]: (root) CMD (run-parts /etc/cron.hourly)

crontab -l отображает файл crontab для отдельного пользователя (где-то вроде /var/spool/cron и т.д.). Обычно он может быть использован любым пользователем, и root здесь не является исключением.

Файлы в /etc являются системными crontabs, не привязанными к конкретному пользователю, и инструмент crontab не редактирует их.

Вы можете использовать файлы в /etc/cron.d или /etc/cron.daily и т.д. для улучшенной компартментализации.

Более подробное обсуждение на эту тему можно найти, например, на System Crontab или Root Crontab

Ответ или решение

Команда crontab -l отображает задачи из пользовательского crontab-файла, которые обычно хранятся в каталоге вроде /var/spool/cron. Когда вы запускаете crontab -l от имени пользователя, например root, вы видите только те задания, которые были добавлены именно в пользовательские crontab-файлы. Каждому пользователю может быть назначен свой набор crontab-задач, которые хранятся отдельно от системных crontab-ов.

Файл /etc/crontab относится к системным crontab-файлам. Такие файлы обслуживаются непосредственно системой и служат для показа заданий, которые должны выполняться независимо от какого-либо конкретного пользователя. Здесь вызов crontab -l не работает, поскольку эта команда не предназначена для чтения системных crонтab-ов.

Вот несколько причин, почему ваша задача в /etc/crontab не отображается при вызове crontab -l:

  1. Раздельное управление: Системные crontab-файлы и пользовательские crontab-файлы управляются отдельно. Это обеспечивает гибкость и разграничивает права доступа: системный администратор может настраивать системные задачи, тогда как пользователи могут управлять своими собственными заданиями.

  2. Отдельные локации хранения: Пользовательские задания хранятся в отдельной локации, как правило, в /var/spool/cron, и связаны с конкретными пользователями. Системные задания расположены в /etc/crontab, префикс-каталоге /etc/cron.d или в других директориях, используемых для системных задач, таких как /etc/cron.daily.

  3. Универсальный доступ: crontab -e, crontab -l и другие подобные команды ориентированы на работу с пользовательскими crontab. Они обеспечивают упрощённый интерфейс для работы с заданиями пользователя, что удобно и безопасно.

Если вы хотите управлять системными задачами crontab, следует редактировать /etc/crontab непосредственно или размещать скрипты в таких каталогах, как /etc/cron.d или других подходящих директориях. Это может улучшить организацию задач и упростить их сопровождение.

Если требуется отобразить все задачи, включая системные, рекомендуется напрямую просмотреть содержимое /etc/crontab или использовать описанные выше директории.

Оцените материал
Добавить комментарий

Капча загружается...