Рейтинг:4

Как запустить определенную службу при запуске Ubuntu на WSL2

флаг th

мне нужно бежать запуск службы sudo postgresql каждый раз, когда я запускаю Ubuntu на WSL2.

Как я могу запустить службу автоматически при запуске Ubuntu?

WSL не использует systemd, поэтому sudo systemctl включить postgresql не работает.

$ sudo systemctl статус postgresql
Система не была загружена с systemd в качестве системы инициализации (PID 1). 
Не могу работать. Не удалось подключиться к шине: хост не работает

Есть ли стандартный способ запустить службу при запуске?

Редактировать

Я хочу запустить службу при запуске Ubuntu, а не при запуске Windows.

muru avatar
флаг us
Отвечает ли это на ваш вопрос? [WSL Ubuntu, есть ли простой способ автоматического запуска bash при запуске Windows?](https://askubuntu.com/questions/1177273/wsl-ubuntu-is-there-an-easy-way-to-have- bash-start-automatic-on-windows-sta)
muru avatar
флаг us
(Если вы не имели в виду запуск при загрузке, а только при запуске WSL, то просто поместив `sudo service postgresql start` в ваш `.bashrc`, все должно работать нормально.)
ironsand avatar
флаг th
Я просто хочу запустить службу при запуске WSL. И я бы не стал использовать команду `sudo` в `.bashrc`. Таким образом, мне всегда нужно вводить пароль, когда я открываю новые вкладки.
muru avatar
флаг us
Вы бы добавили правило NOPASSWD только для этой команды, чтобы не запрашивать пароль.
ironsand avatar
флаг th
Я добавил `ironsand ALL=NOPASSWD:/usr/sbin/service postgresql` в `/etc/sudoer` и перезапустил wsl, но мне все равно нужно каждый раз вводить пароль. Может быть, это другой вопрос, я должен открыть новый вопрос?
muru avatar
флаг us
Если вы используете аргумент команды, то он должен точно соответствовать командной строке (`sudo service postgresql` != `sudo service postgresql start`. Попробуйте также добавить `start` в строку sudoers. У вас не должно быть чтобы перезапустить WSL, изменения в `sudoers` вступают в силу немедленно.
Рейтинг:6
флаг vn

В недавнем выпуске Windows 11 есть два предпочтительных способа сделать это.

Windows 11

Теперь вы можете выполнить произвольную командную строку при запуске экземпляра, создав/отредактировав /etc/wsl.conf (через sudo) со следующим:

[ботинок]
command="запуск службы postgresql"

Эта команда запускается от имени пользователя root и не выводит никаких результатов. Если вам нужно запустить несколько команд, они должны быть разделены точкой с запятой (или что-то вроде &&) внутри команда= нить.

Windows 10

На WSL с Windows 10 есть еще более простой способ, ИМХО, чем ставить судо команду в вашем запуске и беспокоиться о sudoers.

sudoers это, безусловно, канонический (не каламбур, просто счастливая случайность) способ сделать это в Ubuntu, но в WSL проще использовать следующий синтаксис в вашем ~/.bashrc:

 wsl.exe -u статус корневой службы postgresql || wsl.exe -u запуск корневой службы postgresql

wsl.exe -u корень не требует пароля. Из PowerShell и CMD его можно вызвать без исполняемый, но внутри WSL требуется расширение.

Примечание, за @mbomb007, это будет генерировать одно или два сообщения при каждом запуске. Чтобы подавить это, используйте:

wsl.exe -u статус корневой службы postgresql > /dev/null || wsl.exe -u корневая служба postgresql start > /dev/null
mbomb007 avatar
флаг so
Чтобы не видеть вывод каждый раз, когда вы открываете WSL, используйте `wsl.exe -u root service postgresql status > /dev/null || wsl.exe -u root service postgresql start > /dev/null` вместо этого.
Jeppe avatar
флаг es
Решение для Windows 11 у меня не работает ... служба все еще неактивна. Я могу сказать, что он загружается медленнее, прежде чем он показывает «Сон на 1 секунду, чтобы позволить systemd успокоиться».
NotTheDr01ds avatar
флаг vn
@Jeppe Похоже, вы используете скрипт Systemd - возможно, WSL2Hacks или Genie? Это изменит *много* поведения вашей системы. Если у вас «работает» Systemd, просто используйте обычные методы `systemctl` для автозапуска -- что-то вроде `sudo systemctl enable `. Но настоятельно рекомендуем вам понять возможные предостережения, с которыми вы можете столкнуться при работе с Systemd под WSL2. Это лишь одна из многих вещей, которые будут отличаться.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.