
Sinceramente, não tenho certeza se isso é um problema com o WSL ou se estou apenas fazendo algo errado com o Ubuntu em geral, mas não consigo fazer com que o serviço cron seja executado na inicialização do meu sistema WSL.
Tudo começa bem com:
sudo service cron start
Mas não inicia na inicialização mesmo depois:
sudo update-rc.d cron defaults
sudo update-rc.d cron enable
Versão:
$ uname -a
Linux PC-01 4.4.0-18362-Microsoft #476-Microsoft Fri Nov 01 16:53:00 PST 2019 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic
Responder1
Pergunta antiga que acabei de encontrar ao procurar uma possível "duplicata" para outra pergunta que acabei de fazer. Colocando a resposta aqui, já que este é o primeiro resultado da pesquisa para "wsl start services".
Há umatualresposta e umfuturoresposta (com base nas versões Windows 10/11 Preview do WSL atualmente disponíveis).
A resposta atual é que WSL não possui o conceito de “serviços de inicialização”. O processo da Microsoft init
não é um SysVinit nem um Systemd init como nos sistemas Linux "normais".
Se você quiser iniciar os serviços automaticamente, existematualmenteduas maneiras de fazer isso, com uma terceira chegando no próximo lançamento do WSL:
Opção 1: Configure uma "Tarefa Agendada" do Windows para ser executada no login (não na inicialização):
- A tarefa pode ser uma "Tarefa Básica" para
- "Iniciar um programa"
- O "Programa" é
wsl.exe
- E os "Argumentos" deveriam ser
-u root service cron start
Isso executará o WSL no login como usuário root (necessário para iniciar os serviços) e executará o
service cron start
comando. Claro, isso pode ser modificado para executar qualquer serviço que possua uminit.d
script. Observe que isso não funciona (pelo menos atualmente) se você agendar a tarefa para ser executada na inicialização do Windows, pois o WSL parece exigir que o usuário esteja logado para manter o processo em execução em segundo plano.
Opção 2: Modifique a inicialização do shell para verificar se o serviço está em execução e inicie-o, se necessário.
Na sua inicialização (normalmente
~/.bashrc
) adicione a seguinte linha:wsl.exe -u root sh -c "service cron status || service cron start"
No Linux "normal", você precisa
visudo
ter permissão para executar o comando sem uma senha (ou digitar a senha sempre que fizer login). Usandowsl.exe -u root
dedentro deWSL permite que você contorne isso.
Opção 3: Um novo recurso do Windows 11 é a capacidade de especificar tarefas de inicialização para WSL usando o
/etc/wsl.conf
arquivo. Se você tiver Windows 11, crie esse arquivo com as seguintes linhas:[boot] command="service cron start"
De acordo comDocumento da Microsoft, isso executará o comando como root quando a instância WSL for iniciada.
Se você precisar executar vários comandos na inicialização do WSL, separe-os com ponto e vírgula na mesma
command
linha:[boot] command="service ssh start; service cron start"
Responder2
Esta postagem me ajudou a conseguir o que estava procurando, no entanto, eu precisava executar vários comandos (iniciar o xrdp, ajustar o eth0 mtu, atualizar o resolv.conf) e executar wsl.exe
várias vezes instanciaria vários logins root, causando alguns problemas com o bloqueio de arquivos, resolv.conf
possivelmente porque o WSL faz alguns configuração em cada login, não positivo.
Estou usando a versão do kernel wsl2: 5.10.102.1 Windows 10 com Ubuntu 20.04.5 LTS. Minhas necessidades eram
- Inicie o xrdp (para que eu possa me conectar a uma sessão gui)
- Defina eth0 mtu como 1350 (WSL teve problemas de conectividade durante a VPN devido ao mtu)
- Atualização
resolv.conf
com resolvedores upstream (continuando sendo atualizado pelo WSL independentemente degenerateResolvConf = false
inwsl.config
)
Então, para expandir a resposta de @NotTheDr01ds, aqui está o que eu fiz.
- Coloque todos os comandos em um novo script de shell
.mystartup.sh
no diretório inicial - Chame
.mystartup.sh
como root de.profile
Aqui está o que eu adicionei.profile
# startup stuff
# run startup script as root
wsl.exe -u root /home/user/.mystartup.sh
E aqui está.mystartup.sh
# startup stuff
# service xrdp start
service xrdp status || service xrdp start
# setup lower mtu for vpn links
ifconfig eth0 mtu 1350
echo "eth0 mtu updated!"
# remove link to /run/resolvconf/resolv.conf & create new
rm -f /etc/resolv.conf
touch /etc/resolv.conf
chmod u+rwx,g+rwx,o+rx /etc/resolv.conf
# setup nameservers
echo "# this resolv.conf created using user .profile script" >> /etc/resolv.conf
echo "# wsl auto-generate must be disabled in /etc/wsl.config" >> /etc/resolv.conf
echo "nameserver 10.0.0.50" >> /etc/resolv.conf
echo "nameserver 10.0.0.51" >> /etc/resolv.conf
echo "resolv.conf modified with custom dns resolvers!"
echo