Вопрос или проблема
Я добавил следующее в /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
:
-
Раздельное управление: Системные crontab-файлы и пользовательские crontab-файлы управляются отдельно. Это обеспечивает гибкость и разграничивает права доступа: системный администратор может настраивать системные задачи, тогда как пользователи могут управлять своими собственными заданиями.
-
Отдельные локации хранения: Пользовательские задания хранятся в отдельной локации, как правило, в
/var/spool/cron
, и связаны с конкретными пользователями. Системные задания расположены в/etc/crontab
, префикс-каталоге/etc/cron.d
или в других директориях, используемых для системных задач, таких как/etc/cron.daily
. -
Универсальный доступ:
crontab -e
,crontab -l
и другие подобные команды ориентированы на работу с пользовательскими crontab. Они обеспечивают упрощённый интерфейс для работы с заданиями пользователя, что удобно и безопасно.
Если вы хотите управлять системными задачами crontab, следует редактировать /etc/crontab
непосредственно или размещать скрипты в таких каталогах, как /etc/cron.d
или других подходящих директориях. Это может улучшить организацию задач и упростить их сопровождение.
Если требуется отобразить все задачи, включая системные, рекомендуется напрямую просмотреть содержимое /etc/crontab
или использовать описанные выше директории.