I have tried to setup redis as starting background task with wsl-autostart, Task Scheduler and with lot vbs scripts including one described here but none of them seemed to work.
In the end I have manually created a simple one that does the job. This script basically starts a hidden Ubuntu Window and starts redis-server inside it.
-
Install WSL (this is tested with Ubuntu 18.04 version)
-
Install redis-server inside WSL
sudo apt install redis-server
-
Add sudo permission to your user to execute service command without password Open sudoers file
sudo visudo
and add to end:your_username ALL=NOPASSWD:/usr/sbin/service redis-server
or if you want to disable sudo passwords generally add this to the end:your_username ALL=(ALL:ALL) NOPASSWD:ALL
-
Create vbs file e.g start-redis.vbs inside startup folder (Open Run and enter
shell:startup
) -
In vbs file insert following:
Set oShell = CreateObject("WScript.Shell")
oShell.Run "wsl", 0
oShell.Run "bash -c ""sudo service redis-server start --daemonize yes"""
- That's it. You can try it by running vbs script and then run htop inside WSL terminal. You should see that redis is running. You can also set this up to work with Windows Task Scheduler.
This command works great, but I am having issues telling Windows to keep WSL Ubuntu running.
Windows seems to kill the WSL Ubuntu process and takes the Redis daemon down with it.
See https://learn.microsoft.com/en-us/answers/questions/1292052/how-to-prevent-wsl2-from-automatically-stopping?comment=question#newest-question-comment
I found this microsoft/WSL#10138
which indicates
wsl --exec dbus-launch true
will keep the wsl process alive.Thus far it seems to be working, so the fully modified command that I am using in VS Code tasks.json is:
"command": "cmd /c \"wsl --exec dbus-launch true && wsl --exec sudo service redis-server start --daemonize yes && wsl --exec redis-cli PING && Exit /B 5\"",