2017-02-16 7 views
0

У меня есть следующий (анонимный) Systemd сценарий под названием кот-autostart.service, хранится в "/usr/lib/systemd/system/tomcat-autostart.service"systemd script: назначение за пределами раздела; Отсутствующие '='

[Unit] 
Description=Tomcat Autostart Script 
Requires=var-www-projects.mount 
After=var-www-projects.mount 

[Service] 
Type=forking 
ExecStart=/usr/bin/tomcat-autostart start 
ExecStop=/usr/bin/tomcat-autostart stop 

[Install] 
WantedBy=multi-user.target 

После запуска

sudo systemctl daemon-reload 
sudo systemctl enable tomcat-autostart.service 

Я получаю сообщение об ошибке:

Failed to execute operation: Bad message 

И я также получаю следующий вывод в/вар/Журнал/сообщений

Feb 17 11:29:53 cheese systemd: [/usr/lib/systemd/system/tomcat-autostart.service:1] Assignment outside of section. Ignoring. 
Feb 17 11:29:53 cheese systemd: tomcat-autostart.service lacks both ExecStart= and ExecStop= setting. Refusing. 
Feb 17 11:29:53 cheese systemd: [/usr/lib/systemd/system/tomcat-autostart.service:1] Missing '='. 
Feb 17 11:29:53 cheese systemd: [/usr/lib/systemd/system/tomcat-autostart.service:1] Missing '='. 

У меня было какое-то время, но я добавил несколько комментариев над строкой «[Unit]», и она перестала работать. Затем я удалил комментарии и, возможно, непреднамеренно изменил что-то еще в скрипте, и после этого я не смог заставить его работать снова.

Кажется, это приятно в этом противоречии. В первом сообщении об ошибке указано, что есть назначение в первой строке («[Unit]»), а третий говорит, что в присваивании отсутствует знак «=». Таким образом, в основном «[Unit]» является назначением, за исключением того, что это не потому, что отсутствует знак «=».

Поиск этой проблемы определил, что второе сообщение об ошибке является прямой причиной других. Поскольку он игнорирует заголовки разделов, он никогда не читает объявления ExecStart и ExecStop. Если я могу решить первое и третье сообщения об ошибках, я должен уметь

В чем проблема с моим скриптом? Запуск «sudo/usr/bin/tomcat-autostart start» преуспевает, как и ожидалось, и самая распространенная причина в Интернете для этого сообщения об ошибке заключается в том, что сценарий не использует абсолютные пути (что я делаю в этом случае)

ответ

0

в StackOverflow.

Ваш сценарий systemd выглядит хорошо. Кроме того, когда я копирую/вставляю его в свою собственную систему и запускаю его через systemd-analyze verify, он не генерирует эту ошибку. Я получаю ошибки только в отношении путей к файлам, которые не существуют в моей системе, но должны существовать на вашем компьютере:

systemd-analyze verify ~/tmp/t.service 
t.service: Failed to create t.service/start: Unit var-www-projects.mount not found. 
t.service: Command /usr/bin/tomcat-autostart is not executable: No such file or directory 
t.service: Command /usr/bin/tomcat-autostart is not executable: No such file or directory 

Я думаю, что ошибка была потеряна при переводе, когда вы ее анонимили. Запустите systemd-analyze verify /usr/lib/systemd/system/tomcat-autostart.service и подтвердите ошибки, которые вы получаете от своего .

Кроме того, файлы, которые вы модифицируете, должны быть в /etc/systemd/system. Файлы в /usr/lib предназначены только для управления пакетами, которые вы устанавливаете.

Если ваш файл в /etc/systemd/system имеет имя в виде параллельного файла в каталоге /usr/lib/systemd/system, он переопределит его.

+0

Я дважды проверил, что анонимизация ничего не изменила. Строками, которые были изменены, были строки Description, Requires, After, ExecStart и ExecStop, а также имя файла * .service.Каких-либо одиночных кавычек в файле не было. Перемещение файла в '/ etc/systemd/system' ничего не меняло, кроме вывода в'/var/log/messages' (который теперь ссылается на '/etc/systemd/system/tomcat-autostart.service ', вместо'/usr/lib/systemd/system/tomcat-autostart.service') Однако я буду использовать этот каталог в будущем. –

+0

См. Обновленный ответ, в котором упоминается инструмент 'systemd-analysis verify'. –

0

Я решил эту проблему. Оказывается, что кодировка файла была изменена, когда я добавил комментарии (превращение файла из кодировки utf-8 в кодировку utf-16). Я предполагаю, что systemd не поддерживает utf-16 и интерпретирует его как ASCII (или что-то еще). Изменение кодировки обратно в UTF-8 позволило автозапускам начать работу снова.

Смежные вопросы