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