Configuration file is marked executable
Предупреждение появляется, когда на unit-файле выставлен бит исполнения. Запуск службы при этом проходит, но причина такой пометки обычно говорит о путанице: файл создали копированием скрипта или распаковали из архива вместе с правами.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Файл создан копированием скрипта
Права наследуются от источника. Из скрипта получается unit-файл с битом исполнения, который здесь не нужен.
-
Файлы распакованы из архива с правами
Архив сохраняет права. После распаковки все файлы оказываются исполняемыми.
-
В каталоге unit лежит скрипт
Настоящий скрипт в каталоге описаний тоже даёт это предупреждение и мешает читать журнал загрузки.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Какие файлы помечены исполняемыми.
sudo find /etc/systemd/system -maxdepth 1 -type f -perm -u+x 2>/dev/nullПредупреждения при загрузке описаний.
journalctl -b --no-pager | grep -i "marked executable" | tailПрава на unit-файлы.
sudo ls -l /etc/systemd/system/*.service | headРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Права наследуются от источника. Из скрипта получается unit-файл с битом исполнения, который здесь не нужен.
- Как проверить
-
Посмотрите права файла и предупреждение.
sudo ls -l /etc/systemd/system/myapp.service journalctl -b --no-pager | grep -i "marked executable" | tail -3
- Как исправить
-
Уберите бит исполнения. Unit-файл — описание, а не программа: systemd его читает, а не запускает.
sudo chmod 644 /etc/systemd/system/myapp.service
- Почему происходит
- Архив сохраняет права. После распаковки все файлы оказываются исполняемыми.
- Как проверить
-
Посмотрите права на все свои unit-файлы.
sudo find /etc/systemd/system -maxdepth 1 -type f -perm -u+x -name "*.service" 2>/dev/null
- Как исправить
- Исправьте права разом по всем найденным файлам. Заодно стоит проверить, не попали ли в каталог посторонние файлы.
- Почему происходит
- Настоящий скрипт в каталоге описаний тоже даёт это предупреждение и мешает читать журнал загрузки.
- Как проверить
-
Посмотрите, что за файл помечен исполняемым.
sudo file /etc/systemd/system/* 2>/dev/null | grep -v "ASCII text$" | head
- Как исправить
- Перенесите скрипты в подходящий каталог и ссылайтесь на них из описания службы. В каталоге описаний должны быть только описания.
Пример вывода
Unit-файл создан копированием скрипта. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
systemd[1]: /etc/systemd/system/myapp.service:1: Configuration file /etc/systemd/system/myapp.service is marked executable. Please remove executable permission bits. Proceeding anyway.
$ sudo ls -l /etc/systemd/system/myapp.service
-rwxr-xr-x 1 root root 412 Sep 15 20:22 /etc/systemd/system/myapp.service
Связанные ошибки
- Configuration file is marked world-inaccessible Предупреждение о правах на unit-файл: служба работает, но файл недоступен для чтения другим.
- Unit file is bad и ошибки разбора unit-файла systemd не может разобрать unit-файл: неизвестные параметры, ошибки в секциях, недопустимые значения. Как найти проблемную строку.
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- Панели и источники данных не подхватываются при запуске Описания источников и панелей не применяются: каталог недоступен службе или описания с ошибкой.
- Apache: Invalid command — не включён модуль Apache не запускается: директива требует модуль, который не подключён. Как найти нужный модуль и включить.
- Apache: правила .htaccess не действуют Файл .htaccess игнорируется: запрещён параметром AllowOverride, нет нужного модуля, файл не читается.
- AppArmor: apparmor="DENIED" в журнале ядра Профиль AppArmor запретил операцию: как прочитать запись, найти профиль и поправить его правильно.
- Caddy не занимает порты 80 и 443 без прав Служба падает при открытии слушателя: нет возможности занимать привилегированные порты.
Источники
-
systemd.unit(5)
Права на файлы описаний. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено на systemd 255: предупреждение появляется при выставленном бите исполнения.