Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

systemctl doesn't work #1579

Open
hungys opened this issue Jan 10, 2017 · 23 comments
Open

systemctl doesn't work #1579

hungys opened this issue Jan 10, 2017 · 23 comments
Labels

Comments

@hungys
Copy link

hungys commented Jan 10, 2017

I followed the instructions from DigitalOcean to install the LAMP stack on WSL, but I found that I cannot use systemctl to control the server programs (including but not limited to Apache and Nginx).

After installing Apache, I tried using systemctl to start Apache server but it did not work.

$ sudo systemctl start apache2
Failed to connect to bus: No such file or directory

PS. systemctl list-units also outputs the same error.

Though I can still start it with sudo service apache2 start or sudo /etc/init.d/apache2 start, I'm curious about if systemctl will be supported in Ubuntu on Windows in the near future? Thanks.

Version: Windows 10 Insider Preview Build 15002

@therealkenc
Copy link
Collaborator

open("/sys/fs/kdbus/0-system/bus", O_RDWR|O_NOCTTY|O_CLOEXEC) = -1 
    ENOENT (No such file or directory)
connect(3, {sa_family=AF_LOCAL, sun_path="/run/systemd/private"}, 22) = -1 
    ENOENT (No such file or directory)
connect(3, {sa_family=AF_LOCAL, sun_path="/var/run/dbus/system_bus_socket"}, 33) = -1
    ENOENT (No such file or directory)

Starting dbus (sudo service dbus start) will get you a little further but in short no systemd no systemctl.

#994.

@fpqc
Copy link

fpqc commented Jan 10, 2017

Systemd isn't running and won't run without major changes tothe initialization process.

Edit: @therealkenc lol, Systemd in Ubuntu is still trying to use kdbus?

@hungys
Copy link
Author

hungys commented Jan 11, 2017

@fpqc Thanks. That makes sense.

I found in another related issue that WSL has its own init, so upstart doesn't exist, neither. Even if sudo service ... works, what it invokes is init.d scripts, but not upstart?

@fpqc
Copy link

fpqc commented Jan 11, 2017

Not sure. All of that legacy-init-transition-related stuff is being sorted out by the distros. Upstart used to map the "service" command to upstart, which managed the init scripts. Since the switch to systemd, Ubuntu has replaced upstart with a mix of "native unit files" (i.e. little .ini-looking files that instruct systemd how to launch daemons) and classic-style-init-init scripts, which are controlled through the systemd-sysvcompat module of systemd.

For daemons of the second type, you can manually run the init.d scripts as before, not sure how they have aliases the old upstart commands. But otoh, for daemons controlled with native unit files, you will have to manually start the actual daemon executables by themselves or with your own custom 'init' scripts (depending on the daemon, this could be easy or could be hard).

It seems like some of the basic building blocks for using systemd for init are being added into WSL. The team has quietly added things like the cgroups fs, and the NT kernel has apparently always supported namespaces, two key features used by systemd. Ben Hillis also mentioned in his interop video and blogpost that Microsoft's init process (which sets up quite a bit of the magic) could probably be moved out of pid 1 and into a non-init role in the future.

I'll let you speculate about what that could mean. The devs here are very sphinx-like about future plans until they have been announced officially or at least until someone like Alex Ionescu has reverse engineered the surprise to the point where it is public knowledge. 🙃

@Arios509
Copy link

Facing this problem too, but does it because of the windows itself blocking? Spent whole day to figure it how to auto run the nginx server, cause everytime i close the terminal, this process will turn off, it become useless..
There is so much things could happen if bash could do everything.

@JacobDB
Copy link

JacobDB commented Jun 16, 2017

This is frustrating, I was so confused why I couldn't get Ajenti installed and working. This really seems like something that should work, even if Bash needs to remain open.

@fpqc
Copy link

fpqc commented Jun 16, 2017

@JacobDB easier said than done, I think. They will at least need to stub out a cgroups implementation and convert the current /init to a service that gets launched by systemd. We actually have not heard a lot since CU released apart from the new mounting feature.

@seadonfrank
Copy link

You may want to try using Upstart to run and manage third-party services
Also, Follow me on linkedIn , I am going to publish an article very soon on WSL and running opensource project with WSL. Hopefully, it should give you a comprehensive guide while you start working with WSL

@yecril71pl
Copy link

service calls systemctl in openSUSE, so we are back to square 1.

@khanguslee
Copy link

You might be able to try replacing /usr/bin/systemctl with https://github.com/gdraheim/docker-systemctl-replacement/blob/master/files/docker/systemctl.py

@bimimicah
Copy link

Like @khanguslee says above, you can work around the issues with systemctl by replacing it with @gdraheim's script.
just do the following (assumes /usr/bin/systemctl) :

mv /usr/bin/systemctl /usr/bin/systemctl.old
curl https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py > /usr/bin/systemctl
chmod +x /usr/bin/systemctl

@ctsstc
Copy link

ctsstc commented Oct 15, 2019

I had to curl it down into my current directory and then sudo move it to the bin directory. I also didn't start with one to begin with.

curl https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py > ./systemctl
sudo mv systemctl /usr/bin/systemctl
chmod +x /usr/bin/systemctl

@zfk513
Copy link

zfk513 commented Nov 6, 2019

I had to curl it down into my current directory and then sudo move it to the bin directory. I also didn't start with one to begin with.

curl https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py > ./systemctl
sudo mv systemctl /usr/bin/systemctl
chmod +x /usr/bin/systemctl

i can't start the service as well,but can list the service

@zfk513
Copy link

zfk513 commented Nov 6, 2019

Like @khanguslee says above, you can work around the issues with systemctl by replacing it with @gdraheim's script.
just do the following (assumes /usr/bin/systemctl) :

mv /usr/bin/systemctl /usr/bin/systemctl.old
curl https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py > /usr/bin/systemctl
chmod +x /usr/bin/systemctl

how to start a service?pls tell me ,after start command it didn't reply

@bayeslearner
Copy link

Like @khanguslee says above, you can work around the issues with systemctl by replacing it with @gdraheim's script.
just do the following (assumes /usr/bin/systemctl) :

mv /usr/bin/systemctl /usr/bin/systemctl.old
curl https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py > /usr/bin/systemctl
chmod +x /usr/bin/systemctl

It doesn't seem to work when I use lxssmanager to restart wsl. Unit services are not auto-loaded. Why?

@bimimicah
Copy link

It doesn't seem to work when I use lxssmanager to restart wsl. Unit services are not auto-loaded. Why?

systemd is not actually running using this method (and can't run on WSL1, regardless). This method replaces the systemctl command with a script that reads the service unit files and follows the instructions inside to start/stop services. There is no overarching service manager daemon running in the background in this scenario.

Therefore, auto-loading services can't happen, because there is nothing to auto-load them. Just run the normal start command - if you need to start a bunch of services at once, make a bash script with a bunch of start commands in it.

@ghost
Copy link

ghost commented Oct 10, 2021

I hope WSL 2 auto start linux, and auto start systemd , as a real linux Operating system.
I want to let Database to auto start .

@gochev
Copy link

gochev commented Apr 4, 2022

As a workaround you can use the distrod https://github.com/nullpo-head/wsl-distrod

However the python script might works fine but it doesn't work for MySQL when I tried.

@petrprikryl
Copy link

Hi, is there any official information about this https://bugs.launchpad.net/ubuntu/+source/wsl-setup/+bug/1962556? I couldn't find how to activate experimental support of systemd on Ubuntu 22.04 which is now available for WSL 2.

@haosmos
Copy link

haosmos commented Apr 24, 2022

Hi, is there any official information about this bugs.launchpad.net/ubuntu/+source/wsl-setup/+bug/1962556? I couldn't find how to activate experimental support of systemd on Ubuntu 22.04 which is now available for WSL 2.

I'm also interested in learning about this.

@petrprikryl
Copy link

https://devblogs.microsoft.com/commandline/systemd-support-is-now-available-in-wsl/

@gochev
Copy link

gochev commented Sep 26, 2022

I have been using distroid from few months works like charm to install on WSL2:

curl -L -O "https://raw.githubusercontent.com/nullpo-head/wsl-distrod/main/install.sh"
chmod +x install.sh
sudo ./install.sh install
/opt/distrod/bin/distrod enable

or you can even do

/opt/distrod/bin/distrod enable --start-on-windows-boot

not sure if the last one is even available with the systems in wsl by Microsoft but if you cant upgrade or want to use it asap.. this works perfectly.

@hoyien
Copy link

hoyien commented Mar 20, 2024

wsl -t Ubuntu can not refresh systemd PID , need restart systemd . You can do
in wsl
sudo sed -i 's/systemd = true/systemd = false/g' /etc/wsl.conf
in powsershell
wsl -d Ubuntu
then restart wsl , after open systemd
in wsl
sudo sed -i s/systemd = false/systemd = true/g /etc/wsl.conf
in powsershell
wsl -t Ubuntu
wsl -d Ubuntu

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests