У меня есть следующий (анонимный) 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» преуспевает, как и ожидалось, и самая распространенная причина в Интернете для этого сообщения об ошибке заключается в том, что сценарий не использует абсолютные пути (что я делаю в этом случае)
Я дважды проверил, что анонимизация ничего не изменила. Строками, которые были изменены, были строки 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') Однако я буду использовать этот каталог в будущем. –
См. Обновленный ответ, в котором упоминается инструмент 'systemd-analysis verify'. –