- Как выяснить, почему мой сервис systemctl не запускался в CentOS 7?
- Как это исправить
- Автозапуск через systemctl не работает
- Почему моя включенная служба systemd не запускается при загрузке?
- Docker: команда «service» работает, но команда «systemctl» не работает
- 3 ответа
- Команду systemctl не найдено
- Решение
Как выяснить, почему мой сервис systemctl не запускался в CentOS 7?
Я использую CentOS 7. Как мне выяснить, почему служба не запускается? Я создал этот сервис
Файл указывает на это
Я могу запустить этот файл сам по себе. Но когда я пытаюсь запустить его как часть службы, я замечаю, что мой сервер nodeJS не запущен. Даже когда я проверяю «sudo systemctl —state = fail», я не вижу никаких ошибок .
Как выяснить, почему мой сервис не запустился?
Ваш сервис не Type= указан в [Service] разделе, поэтому systemd предполагается, что вы имели в виду Type=simple .
Это означает, systemd что ожидаемый процесс ExecStart= будет продолжать работать до тех пор, пока служба работает. Но похоже, что вы start.sh только запускаете одну команду и затем выходите. То есть команда : запускает целевую команду как демон, или другими словами, в фоновом режиме. Как только команда завершится, запущенная оболочка завершится. forever forever start forever start start.sh
В этот момент systemd считается, что эта служба не работает. Но подождите, контрольная группа, назначенная для этой службы, все еще содержит запущенный процесс. «Итак, — думает systemd , — он не только потерпел неудачу, но и оставил после себя беспорядок. Не может этого иметь». Так как нет и KillMode= не KillSignal= указано, systemd продолжает свои значения по умолчанию и отправляет SIGTERM для любых оставшихся процессов в этой контрольной группе, и если они не останавливаются своевременно, следует SIGKILL. После этого ваш фактический процесс NodeJS будет мертв, гарантировано.
Как это исправить
Поскольку команда, с которой вы работаете, ExecStart= завершится, как только будет запущен реальный сервер, вы не можете использовать значение по умолчанию Type=simple . Вы должны указать другой тип сервиса.
Вы могли бы использовать Type=forking . Для этого типа man systemd.service рекомендуется использовать PIDFile= параметр, поэтому, если ваш сервер NodeJS создает файл PID для себя (или вы добавляете параметры в forever команду, чтобы он создавал его для него), вы должны сообщить systemd , где он будет.
Если у Type=forking вас не работает, то вы можете указать Type=oneshot с RemainAfterExit=yes .
Это заставляет systemd просто запускать ExecStart= команду при запуске службы и ExecStop= при ее остановке, и не заботиться ни о чем другом.
systemd все равно будет помнить, был ли последний раз установлен сервис в остановленном или запущенном состоянии. Таким образом, если вы установите другую службу в зависимости от этой службы, а затем остановите службу NodeJS вручную, другая служба не остановится автоматически и, несомненно, вернет ошибки, когда не сможет использовать вашу службу NodeJS.
Третий вариант — forever полностью пропустить команду и позволить systemd перезапустить процесс NodeJS. В этом случае весь ваш nodejs.service блок будет:
Вы можете добавить другие варианты.
Например, вы можете RestartSec=5 указать 5-секундный спящий режим перед попыткой перезапустить службу, если она неожиданно умирает, чтобы избежать перегрузки системных ресурсов частыми попытками перезапуска, если ваша служба продолжает умирать сразу после перезапуска по какой-либо причине. (Значение по умолчанию RestartSec= составляет 100 мс.)
Или, если вы хотите, чтобы служба была перезапущена, если она возвращает какие-то определенные значения состояния выхода, но считает, что это не удалось на других, есть варианты для этого тоже.
Источник
Автозапуск через systemctl не работает
Всем привет! Не могу разобраться с автозагрузкой через systemctl, помогите пожалуйста разобраться.
Есть небольшая самописная программа(деймон) на с++, мне нужно её добавить в автозагрузку, решил сделать это при помощи systemctl, и в итоге не чего не получается, в ручном режиме «systemctl start my_prg», все запускается, а вот автозагрузка не работает.
unit файл максимально простой, и лежит в /etc/systemd/system/my_prg.service его содержимое
И после перезагрузки получаю вот такой вывод по команде systemctl status my_prg:
Подскажите пожалуйста, что тут не так? Спасибо!
а почему Type=forking ?
Это единственный вариант, с которым хотябы в ручном режиме запускается, с остальными вариантами даже через systemctl start my_prg не стартует
так может тут дело не в системд? может быть
небольшая самописная программа(деймон) на с++
сделана через жопу? потому что системд не более чем запускалка.
Такое вполне возможно, но тогда не понятно почему если я делаю автозапуск другими средствами, то все ок, если я тупо пишу в консоли my_prg start, то тоже все ок, ну и как говорил systemctl start my_prg то же ок.
По идеи, если я правильно понимаю, то Type должно равняться simple, но оно не запускается в такой вариации. Возможно, при автозапуске он пытается запуститься в тот момент, когда ещё не все необходимое подгружено.Мой деймон использует mysql, и в After я пробовал прописывать mysql.service, но это не дало положительного результата.
В общем пока не пойму куда копать, что бы понять чего не хватает и почему не стартует.
Если есть идеи, буду очень признателен если их озвучите.
Есть идея перейти на Devuan. Там с этим проще. Потому что сначала все вопят какой системд классный, а потом когда начинают реально использовать получают говен от тех гуру, у которых система грузится за 3 секунды.
Так оно у тебя реально форкается или как?
Если речь идёт о моём деймоне, то да, он реально форкается.
Мой деймон использует mysql, и в After я пробовал прописывать mysql.service
так пробуй его загружать в юзерспейсе. если чо, держу в курсе тупого анонимуса, ну и тебе ТС это не повредит:
это еще далеко не юзерспейс для системд. тебе нужно запускать своего «демона» после graphical.target , как вариант.
зы петух на анонимусе может начать советовать openrc и написание портянок в 3 экрана, пока гента ставит обновления : )
Источник
Почему моя включенная служба systemd не запускается при загрузке?
У меня есть следующий файл системного модуля в /etc/systemd/system/emacs.service :
Я хочу, чтобы это началось при загрузке, поэтому я вошел systemctl enable emacs
Тем не менее, каждый раз, когда мой сервис перезагружается, systemctl status emacs показывает:
Но затем ввод systemctl start emacs и проверка статуса возвращает:
Как я могу получить этот процесс для успешного запуска при загрузке?
Я понятия не имею, почему, но чтобы заставить это работать, я:
добавил User= переменную
Убедитесь, что правильный файл был /etc/systemd/system/emacs.service (ранее это была жесткая ссылка)
и перезапустил systemctl enable emacs
Это заставило это работать.
РЕДАКТИРОВАТЬ Настоящая проблема здесь в том, что у меня была опечатка в строке 3: Documentatin
Я нашел это, проверив journalctl . Я предлагаю всем, у кого есть проблемы со сценарием systemd, сделать то же самое, поскольку в stderr не было ошибок.
ооо это интересно
Выбирая случайную единицу обслуживания и глядя на нее, это зависит от конкретной цели, а не default.target . Последнее символично . настроенная ссылка на конкретную цель, семантически это не имеет смысла. (См. systemctl set-default )
Это может объяснить, почему ваш сервис отображается как disabled после того, как вы его включили. Попробуйте заменить default.target в вашем сервисном файле multi-user.target , например, на.
(Отсутствие сообщения об ошибке при невозможности включения кажется дефектом в systemd. Мне почти интересно, есть ли у вас каталог /etc/systemd/system/default.target.wants ).
У вас есть переменная окружения DISPLAY, это означает, что вы хотите запустить X11. Таким образом, у вас должен быть способ заблокировать ваш сервис до этого момента.
Я сам этого не делал, поэтому не могу сказать, что это сработает, но, скорее всего, это как-то связано graphical.target .
Другая возможность, если X-сервер не запускается сразу (т. Е. У вас есть экран входа с помощью lightdm или чего-то подобного), тогда вам, возможно, придется использовать WantedBy=. вместо этого:
Если вам надоест работать с systemd, вам может понадобиться обычный способ работы менеджеров X-Windows.
/.xprofile файл, который работает как
/.config/autostart/*.desktop файлы. Он автоматически запустит все приложения, которые там определены.
Эти решения не распространяются на всю систему, однако, если у вас несколько пользователей, у каждого из них должна быть собственная запись. Кроме того, приложение запускается не как root, а как вы.
Как примечание: сообщение «загружен + неактивен (мертв)» означает, что systemd было трудно запустить процесс, и в результате он решил отказаться от него. Вы можете вручную проверить, что name.service работает после перезагрузки, используя:
Это обновит статус и запустит службу должным образом, при условии, что информация верна. Затем вы можете проверить статус еще раз, чтобы увидеть дополнительную информацию:
Источник
Docker: команда «service» работает, но команда «systemctl» не работает
Я вытащил изображение centos6 и сделал из него контейнер. Я получил его удар по:
В контейнере centos6 я мог без проблем использовать команду «service». Но когда я вытащил и использовал изображение centos7 :
И «service», и «systemctl» не работали. Сообщение об ошибке:
Мой вопрос:
1. Как люди развиваются без команд «service» и «systemctl»?
2. Что мне делать, если я хочу использовать, например, httpd.service в контейнере centos7? Или, может быть, запускать службы на контейнере не рекомендуется?
3 ответа
Внутри любого контейнера не запущен супервизор процессов. Команда service в вашем контейнере CentOS 6 работает благодаря тому факту, что она просто запускает скрипт из /etc/init.d , который в конечном итоге запускает команду в фоновом режиме и возвращает вам управление.
CentOS 7 использует systemd, а systemd не работает внутри вашего контейнера, поэтому systemctl не с чем поговорить.
В любом случае, использование команды service или systemctl , как правило, неправильно: вы хотите запустить одно приложение, и вы хотите запустить его на переднем плане, чтобы ваш контейнер продолжал run (с точки зрения Docker, команда, которая переходит в фоновый режим, завершилась, и если это был pid 1 в контейнере, контейнер выйдет).
Как люди развиваются без команд «service» и «systemctl»?
Они запускают свои программы напрямую, обращаясь к необходимой документации, чтобы выяснить подходящую командную строку.
Что мне делать, если я хочу использовать, например, httpd.service в контейнере centos7? Или, может быть, рекомендуется запускать службы для контейнера?
Вы могли бы запустить двоичный файл httpd , используя что-то вроде:
Если вам нравится придерживаться команд service / sytemctl для запуска / остановки служб, вы можете сделать это в контейнере centos7, используя docker-systemctl-replace.
Источник
Команду systemctl не найдено
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Ошибка запуска systemctl
Доброго времени суток! Столкнулся с такой ошибкой при запуске systemctl enable:Failed to enable.
Как линки poweroff, halt, reboot (на systemctl) работают
Здравствуйте. Как линки poweroff, halt, reboot (которые все ссылаются на systemctl) работают.
не найдено:(
Пытался скомпилировать пример из книги под названием doublecontexts. Раньше было все.
Да, верно. У меня на 14.04 тоже нет.
Можно попробовать через initctl управлять. Например
Решение
не найдено в индесе
поставили задачу доработать одну базу доработали на тестовом сервере добавили несколько полей и.
Приложение не найдено!
Здравствуйте! возникла такая проблема. Телефон Sony, Android 5.0.2, недавно начал пользоваться.
FieldByName: поле не найдено
Здравствуйте. В коде на последней строчке выскакивает данная ошибка: BandQuery: Field ‘название’.
Поле не найдено СКД
В отчете на скд не выводятся поля «пользователь», «датаизготовления», «дата предполагаемой.
Источник