[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/errors/linux/permission-denied-cron":3,"mdc-2bbplf-key":613,"mdc-igm3ul-key":622,"mdc-fh2v3g-key":653,"mdc--ribf07-key":669,"mdc-f1pzbt-key":693,"mdc-vv2jgh-key":717,"mdc-z3fs77-key":740,"related-/guides/linux/setup-automated-tasks,/errors/linux/cron-output-missing,/guides/linux/selinux-basics":764},{"id":4,"title":5,"appliesTo":6,"author":11,"body":12,"canonical":548,"code":549,"createdAt":550,"description":551,"difficulty":552,"draft":553,"estimatedTime":554,"extension":555,"faq":556,"howToSteps":566,"howToTotalTime":579,"image":548,"keywords":580,"locale":589,"meta":590,"navigation":591,"path":592,"platform":593,"related":594,"section":598,"seo":599,"severity":600,"stem":601,"summary":602,"tags":603,"twitterCreator":548,"twitterSite":548,"type":611,"updatedAt":550,"__hash__":612},"content_ru/errors/linux/permission-denied-cron.md","Ошибка Permission denied в cron: причины и быстрое решение",[7,8,9,10],"Ubuntu 22.04/24.04","Debian 11/12","RHEL 8/9","CentOS Stream 9","FixPedia Team",{"type":13,"value":14,"toc":534},"minimark",[15,20,33,44,48,117,121,126,129,204,217,221,224,227,240,243,251,254,260,263,266,270,273,280,355,361,404,415,420,447,453,477,480,484,487,530],[16,17,19],"h2",{"id":18},"что-означает-ошибка-permission-denied-в-cron","Что означает ошибка Permission denied в cron",[21,22,23,24,28,29,32],"p",{},"Когда планировщик задач пытается запустить ваш скрипт, ядро Linux отклоняет запрос с сообщением ",[25,26,27],"code",{},"/bin/sh: 1: /путь/к/скрипту: Permission denied"," и кодом выхода ",[25,30,31],{},"126",". Это стандартная реакция системы на отсутствие необходимых прав доступа, неверного владельца или блокировку модулями безопасности (SELinux/AppArmor).",[21,34,35,36,39,40,43],{},"Обычно ошибка появляется в системных логах (",[25,37,38],{},"/var/log/syslog"," или ",[25,41,42],{},"/var/log/cron",") либо приходит на почту пользователя cron, если настроен вывод. Задача не выполняется, а вы теряете данные или пропускаете резервное копирование без явного уведомления в консоли.",[16,45,47],{"id":46},"причины-возникновения","Причины возникновения",[49,50,51,67,77,94,100],"ul",{},[52,53,54,58,59,62,63,66],"li",{},[55,56,57],"strong",{},"Отсутствует бит исполнения."," Файл был загружен, скопирован или создан с правами ",[25,60,61],{},"644"," (",[25,64,65],{},"-rw-r--r--","), что разрешает только чтение.",[52,68,69,72,73,76],{},[55,70,71],{},"Несоответствие владельца."," Скрипт принадлежит ",[25,74,75],{},"root",", а задача добавлена в crontab обычного пользователя, или наоборот.",[52,78,79,82,83,86,87,39,90,93],{},[55,80,81],{},"Использование относительных путей."," Cron запускает команды из домашней директории пользователя, не инициализируя переменную ",[25,84,85],{},"$PATH",". Символ ",[25,88,89],{},"~",[25,91,92],{},"./"," в расписании не сработают.",[52,95,96,99],{},[55,97,98],{},"Блокировка SELinux или AppArmor."," В корпоративных дистрибутивах политики безопасности строго контролируют запуск исполняемых файлов из нестандартных каталогов.",[52,101,102,105,106,109,110,39,113,116],{},[55,103,104],{},"Скрипт находится в защищённой файловой системе."," Раздел смонтирован с флагом ",[25,107,108],{},"noexec"," (часто встречается в ",[25,111,112],{},"/tmp",[25,114,115],{},"/home",").",[16,118,120],{"id":119},"способы-решения","Способы решения",[122,123,125],"h3",{"id":124},"способ-1-корректировка-прав-и-владельца","Способ 1: Корректировка прав и владельца",[21,127,128],{},"Сначала убедитесь, что файл действительно является исполняемым и принадлежит тому пользователю, под которым работает cron.",[130,131,132,161,183],"ol",{},[52,133,134,135],{},"Проверьте текущие права:\n",[136,137,142],"pre",{"className":138,"code":139,"language":140,"meta":141,"style":141},"language-bash shiki shiki-themes github-light github-dark","ls -l /opt/scripts/my_task.sh\n","bash","",[25,143,144],{"__ignoreMap":141},[145,146,149,153,157],"span",{"class":147,"line":148},"line",1,[145,150,152],{"class":151},"sScJk","ls",[145,154,156],{"class":155},"sj4cs"," -l",[145,158,160],{"class":159},"sZZnC"," /opt/scripts/my_task.sh\n",[52,162,163,164,167,168],{},"Если бит ",[25,165,166],{},"x"," отсутствует, добавьте его:\n",[136,169,171],{"className":138,"code":170,"language":140,"meta":141,"style":141},"chmod +x /opt/scripts/my_task.sh\n",[25,172,173],{"__ignoreMap":141},[145,174,175,178,181],{"class":147,"line":148},[145,176,177],{"class":151},"chmod",[145,179,180],{"class":159}," +x",[145,182,160],{"class":159},[52,184,185,186],{},"Измените владельца на учётную запись, от имени которой выполняется задача:\n",[136,187,189],{"className":138,"code":188,"language":140,"meta":141,"style":141},"sudo chown username:username /opt/scripts/my_task.sh\n",[25,190,191],{"__ignoreMap":141},[145,192,193,196,199,202],{"class":147,"line":148},[145,194,195],{"class":151},"sudo",[145,197,198],{"class":159}," chown",[145,200,201],{"class":159}," username:username",[145,203,160],{"class":159},[205,206,207],"blockquote",{},[21,208,209,210,213,214,216],{},"💡 Совет: Для системных задач, добавленных через ",[25,211,212],{},"sudo crontab -e",", оставляйте владельцем ",[25,215,75],{},". Для пользовательских задач используйте обычного пользователя.",[122,218,220],{"id":219},"способ-2-явный-вызов-интерпретатора-и-абсолютные-пути","Способ 2: Явный вызов интерпретатора и абсолютные пути",[21,222,223],{},"Даже при правильных правах cron может не найти исполняемый файл или зависимости. Всегда указывайте полные пути.",[21,225,226],{},"Откройте редактор crontab:",[136,228,230],{"className":138,"code":229,"language":140,"meta":141,"style":141},"crontab -e\n",[25,231,232],{"__ignoreMap":141},[145,233,234,237],{"class":147,"line":148},[145,235,236],{"class":151},"crontab",[145,238,239],{"class":155}," -e\n",[21,241,242],{},"Замените строку вида:",[136,244,249],{"className":245,"code":247,"language":248},[246],"language-text","*/5 * * * * ./backup.sh\n","text",[25,250,247],{"__ignoreMap":141},[21,252,253],{},"На:",[136,255,258],{"className":256,"code":257,"language":248},[246],"*/5 * * * * /usr/bin/bash /opt/scripts/backup.sh >> /var/log/backup_cron.log 2>&1\n",[25,259,257],{"__ignoreMap":141},[21,261,262],{},"Перенаправление вывода в лог поможет отследить дальнейшие ошибки без захламления почты.",[264,265],"in-article-ad",{},[122,267,269],{"id":268},"способ-3-проверка-и-настройка-политик-безопасности","Способ 3: Проверка и настройка политик безопасности",[21,271,272],{},"Если права выставлены верно, но ошибка сохраняется, проверьте, не блокирует ли выполнение модуль безопасности.",[21,274,275,276,279],{},"Для ",[55,277,278],{},"SELinux"," (RHEL/CentOS/Fedora):",[130,281,282,294,319],{},[52,283,284,285],{},"Убедитесь в статусе модуля:\n",[136,286,288],{"className":138,"code":287,"language":140,"meta":141,"style":141},"sestatus\n",[25,289,290],{"__ignoreMap":141},[145,291,292],{"class":147,"line":148},[145,293,287],{"class":151},[52,295,296,297],{},"Найдите блокировки за последние 10 минут:\n",[136,298,300],{"className":138,"code":299,"language":140,"meta":141,"style":141},"ausearch -m AVC -ts recent\n",[25,301,302],{"__ignoreMap":141},[145,303,304,307,310,313,316],{"class":147,"line":148},[145,305,306],{"class":151},"ausearch",[145,308,309],{"class":155}," -m",[145,311,312],{"class":159}," AVC",[145,314,315],{"class":155}," -ts",[145,317,318],{"class":159}," recent\n",[52,320,321,322,325,326,346,347,350,351,354],{},"Если в выводе есть ",[25,323,324],{},"denied { execute }"," для вашего скрипта, разрешите выполнение:\n",[136,327,329],{"className":138,"code":328,"language":140,"meta":141,"style":141},"sudo chcon -t bin_t /opt/scripts/my_task.sh\n",[25,330,331],{"__ignoreMap":141},[145,332,333,335,338,341,344],{"class":147,"line":148},[145,334,195],{"class":151},[145,336,337],{"class":159}," chcon",[145,339,340],{"class":155}," -t",[145,342,343],{"class":159}," bin_t",[145,345,160],{"class":159},"\nДля постоянного применения используйте ",[25,348,349],{},"semanage fcontext"," и ",[25,352,353],{},"restorecon",".",[21,356,275,357,360],{},[55,358,359],{},"AppArmor"," (Ubuntu/Debian):",[130,362,363,378],{},[52,364,365,366],{},"Проверьте статус профиля:\n",[136,367,369],{"className":138,"code":368,"language":140,"meta":141,"style":141},"sudo aa-status\n",[25,370,371],{"__ignoreMap":141},[145,372,373,375],{"class":147,"line":148},[145,374,195],{"class":151},[145,376,377],{"class":159}," aa-status\n",[52,379,380,381,384,385,388,389],{},"Если скрипт попадает под строгий профиль, добавьте исключение в ",[25,382,383],{},"/etc/apparmor.d/local/usr.bin.cron"," или переведите профиль в режим жалоб (",[25,386,387],{},"complain","):\n",[136,390,392],{"className":138,"code":391,"language":140,"meta":141,"style":141},"sudo aa-complain /usr/bin/cron\n",[25,393,394],{"__ignoreMap":141},[145,395,396,398,401],{"class":147,"line":148},[145,397,195],{"class":151},[145,399,400],{"class":159}," aa-complain",[145,402,403],{"class":159}," /usr/bin/cron\n",[122,405,407,408,411,412],{"id":406},"способ-4-запуск-через-run-parts-или-оболочку-sh","Способ 4: Запуск через ",[25,409,410],{},"run-parts"," или оболочку ",[25,413,414],{},"sh",[21,416,417,418,354],{},"Иногда проще не менять права, а передать скрипт оболочке, которая сама обработает выполнение. Это особенно полезно, если файл размещён на сетевом диске или в ",[25,419,112],{},[136,421,423],{"className":138,"code":422,"language":140,"meta":141,"style":141},"*/10 * * * * /bin/sh /tmp/temp_script.sh\n",[25,424,425],{"__ignoreMap":141},[145,426,427,431,435,437,440,442,444],{"class":147,"line":148},[145,428,430],{"class":429},"szBVR","*",[145,432,434],{"class":433},"sVt8B","/10 ",[145,436,430],{"class":429},[145,438,439],{"class":429}," *",[145,441,439],{"class":429},[145,443,439],{"class":429},[145,445,446],{"class":433}," /bin/sh /tmp/temp_script.sh\n",[21,448,449,450,452],{},"Или используйте стандартную утилиту ",[25,451,410],{}," для каталогов:",[136,454,456],{"className":138,"code":455,"language":140,"meta":141,"style":141},"0 * * * * /usr/bin/run-parts /etc/cron.hourly\n",[25,457,458],{"__ignoreMap":141},[145,459,460,463,465,467,469,471,474],{"class":147,"line":148},[145,461,462],{"class":151},"0",[145,464,439],{"class":155},[145,466,439],{"class":155},[145,468,439],{"class":155},[145,470,439],{"class":155},[145,472,473],{"class":159}," /usr/bin/run-parts",[145,475,476],{"class":159}," /etc/cron.hourly\n",[21,478,479],{},"Этот метод автоматически применяет стандартные политики запуска и упрощает аудит задач.",[16,481,483],{"id":482},"профилактика","Профилактика",[21,485,486],{},"Чтобы ошибка не возвращалась, придерживайтесь нескольких простых правил при настройке автоматизации:",[49,488,489,499,509,515,524],{},[52,490,491,492,39,495,498],{},"Храните скрипты в выделенных каталогах, например ",[25,493,494],{},"/opt/scripts/",[25,496,497],{},"/usr/local/bin/",", где права наследуются предсказуемо.",[52,500,501,502,39,505,508],{},"Добавляйте в начало каждого скрипта ",[25,503,504],{},"#!/usr/bin/env bash",[25,506,507],{},"#!/bin/sh",", чтобы система точно знала, какой интерпретатор использовать.",[52,510,511,512,514],{},"Не монтируйте каталоги с флагом ",[25,513,108],{},", если в них планируются автоматические запуски.",[52,516,517,518,39,521,354],{},"Регулярно проверяйте логи планировщика: ",[25,519,520],{},"sudo journalctl -u cron -f",[25,522,523],{},"sudo journalctl -u crond -f",[52,525,526,527,354],{},"Перед добавлением в расписание всегда тестируйте команду вручную от имени того пользователя, под которым она будет работать: ",[25,528,529],{},"su - username -c \"/usr/bin/bash /opt/scripts/test.sh\"",[531,532,533],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":141,"searchDepth":535,"depth":535,"links":536},2,[537,538,539,547],{"id":18,"depth":535,"text":19},{"id":46,"depth":535,"text":47},{"id":119,"depth":535,"text":120,"children":540},[541,543,544,545],{"id":124,"depth":542,"text":125},3,{"id":219,"depth":542,"text":220},{"id":268,"depth":542,"text":269},{"id":406,"depth":542,"text":546},"Способ 4: Запуск через run-parts или оболочку sh",{"id":482,"depth":535,"text":483},null,"PERM_DENIED","2026-04-06 16:12:09","Скрипт в cron завершается с ошибкой доступа? Разбираем точные причины, корректируем права и настраиваем SELinux. Готовые инструкции за 5 минут.","easy",false,"5-15 мин","md",[557,560,563],{"question":558,"answer":559},"Почему скрипт работает вручную, но падает в cron?","Cron использует минимальное системное окружение и запускается от другого пользователя. Укажите абсолютные пути, добавьте полный путь к интерпретатору и проверьте права на исполнение.",{"question":561,"answer":562},"Как узнать, от какого имени выполняется задача cron?","Добавьте команду `whoami > /tmp/cron_user.log` в начало задачи или проверьте системный журнал `/var/log/syslog` (для Ubuntu/Debian) и `/var/log/cron` (для RHEL).",{"question":564,"answer":565},"Влияет ли SELinux на ошибку доступа в cron?","Да, в режиме Enforcing политика безопасности может блокировать выполнение скриптов из нестандартных каталог или доступ к сетевым ресурсам. Проверьте статус через `sestatus`.",[567,570,573,576],{"name":568,"text":569},"Проверка прав доступа","Выполните `ls -l /путь/к/скрипту.sh`, убедитесь в наличии бита исполнения (`x`) и корректном владельце файла.",{"name":571,"text":572},"Назначение прав и владельца","Используйте `chmod +x /путь/к/скрипту.sh` и `chown пользователь:группа /путь/к/скрипту.sh`, чтобы синхронизировать доступ с учётной записью cron.",{"name":574,"text":575},"Использование абсолютных путей","В crontab замените все относительные пути на полные, например: `/usr/bin/bash /opt/scripts/backup.sh`, так как cron не загружает переменные `$PATH`.",{"name":577,"text":578},"Проверка политик безопасности","Для SELinux выполните `ausearch -m AVC -ts recent` и при необходимости скорректируйте контекст командой `chcon -t bin_t /путь/к/скрипту.sh`.","PT10M",[581,582,583,584,585,586,587,588],"ошибка permission denied в cron","крон пишет permission denied","cron job не запускается linux","права на скрипт для cron","chown chmod для cron","selinux блокирует cron","cron exit code 126","почему не работает crontab","ru_RU",{},true,"/errors/linux/permission-denied-cron","linux",[595,596,597],"/guides/linux/setup-automated-tasks","/errors/linux/cron-output-missing","/guides/linux/selinux-basics","Ошибки Linux",{"title":5,"description":551},"medium","errors/linux/permission-denied-cron","Ошибка Permission denied в cron возникает при отсутствии прав на выполнение скрипта или доступ к файлам. В этом руководстве вы узнаете, как быстро диагностировать проблему и вернуть автоматические задачи в рабочее состояние.",[604,605,606,607,177,608,609,610],"Linux","Cron","Bash","разрешения файлов","chown","selinux","администрирование","error","Ry8rIBIv8zFFlekw83g2gwGacqEwSh_sJzL6FXS1MsQ",{"data":614,"body":615},{},{"type":75,"children":616},[617],{"type":618,"tag":21,"props":619,"children":620},"element",{},[621],{"type":248,"value":559},{"data":623,"body":624},{},{"type":75,"children":625},[626],{"type":618,"tag":21,"props":627,"children":628},{},[629,631,637,639,644,646,651],{"type":248,"value":630},"Добавьте команду ",{"type":618,"tag":25,"props":632,"children":634},{"className":633},[],[635],{"type":248,"value":636},"whoami > /tmp/cron_user.log",{"type":248,"value":638}," в начало задачи или проверьте системный журнал ",{"type":618,"tag":25,"props":640,"children":642},{"className":641},[],[643],{"type":248,"value":38},{"type":248,"value":645}," (для Ubuntu/Debian) и ",{"type":618,"tag":25,"props":647,"children":649},{"className":648},[],[650],{"type":248,"value":42},{"type":248,"value":652}," (для RHEL).",{"data":654,"body":655},{},{"type":75,"children":656},[657],{"type":618,"tag":21,"props":658,"children":659},{},[660,662,668],{"type":248,"value":661},"Да, в режиме Enforcing политика безопасности может блокировать выполнение скриптов из нестандартных каталог или доступ к сетевым ресурсам. Проверьте статус через ",{"type":618,"tag":25,"props":663,"children":665},{"className":664},[],[666],{"type":248,"value":667},"sestatus",{"type":248,"value":354},{"data":670,"body":671},{},{"type":75,"children":672},[673],{"type":618,"tag":21,"props":674,"children":675},{},[676,678,684,686,691],{"type":248,"value":677},"Выполните ",{"type":618,"tag":25,"props":679,"children":681},{"className":680},[],[682],{"type":248,"value":683},"ls -l /путь/к/скрипту.sh",{"type":248,"value":685},", убедитесь в наличии бита исполнения (",{"type":618,"tag":25,"props":687,"children":689},{"className":688},[],[690],{"type":248,"value":166},{"type":248,"value":692},") и корректном владельце файла.",{"data":694,"body":695},{},{"type":75,"children":696},[697],{"type":618,"tag":21,"props":698,"children":699},{},[700,702,708,709,715],{"type":248,"value":701},"Используйте ",{"type":618,"tag":25,"props":703,"children":705},{"className":704},[],[706],{"type":248,"value":707},"chmod +x /путь/к/скрипту.sh",{"type":248,"value":350},{"type":618,"tag":25,"props":710,"children":712},{"className":711},[],[713],{"type":248,"value":714},"chown пользователь:группа /путь/к/скрипту.sh",{"type":248,"value":716},", чтобы синхронизировать доступ с учётной записью cron.",{"data":718,"body":719},{},{"type":75,"children":720},[721],{"type":618,"tag":21,"props":722,"children":723},{},[724,726,732,734,739],{"type":248,"value":725},"В crontab замените все относительные пути на полные, например: ",{"type":618,"tag":25,"props":727,"children":729},{"className":728},[],[730],{"type":248,"value":731},"/usr/bin/bash /opt/scripts/backup.sh",{"type":248,"value":733},", так как cron не загружает переменные ",{"type":618,"tag":25,"props":735,"children":737},{"className":736},[],[738],{"type":248,"value":85},{"type":248,"value":354},{"data":741,"body":742},{},{"type":75,"children":743},[744],{"type":618,"tag":21,"props":745,"children":746},{},[747,749,755,757,763],{"type":248,"value":748},"Для SELinux выполните ",{"type":618,"tag":25,"props":750,"children":752},{"className":751},[],[753],{"type":248,"value":754},"ausearch -m AVC -ts recent",{"type":248,"value":756}," и при необходимости скорректируйте контекст командой ",{"type":618,"tag":25,"props":758,"children":760},{"className":759},[],[761],{"type":248,"value":762},"chcon -t bin_t /путь/к/скрипту.sh",{"type":248,"value":354},[]]