54 votes

Comment faire en sorte que WSL exécute les services au démarrage ?

Après avoir consulté ce site et divers Q, il est clair que les services et les systemd n'est pas disponible pour le WSL. J'ai besoin de lancer un programme dans WSL à chaque fois que je démarre mon PC, alors j'ai lu cette page sur la façon d'utiliser crontab : Comment lancer le service Ubuntu sur Windows (au démarrage) ? Super utilisateur mais je me suis embrouillé car le format ne correspond pas à celui de la crontab.

En outre, cette question particulière concernait les serveurs SSH, qui exigent que l'aspect sécurité soit pris en compte et traité, ce qui entraîne une complication excessive des étapes. Quoi qu'il en soit, les étapes explorées dans cette question ont été essayées et n'ont pas fonctionné. De plus, cette question est très spécifique aux serveurs SSH, alors que la présente question traite d'une exigence environnementale générale : j'ai besoin de savoir COMMENT exécuter des services dans WSL (ce qui peut inclure, mais ne se limite pas aux serveurs SSH).

En effet - Une solution plus simplifiée est requise que Comment lancer le service Ubuntu sur Windows (au démarrage) ? fournit.

Cependant, c'est mon cron :

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
PATH=cd /usr/local/src/:cd xmr-stak-cpu:cd bin/
@reboot . sudo ./xmr-stak-cpu

Je l'ai aussi fait :

Exécuter la boucle bash/cron au démarrage

Créer un fichier appelé linux.bat dans Shell:startup

Paste: C:\Windows\System32\bash.exe -c 'while [ true ]; do sudo /usr/sbin/cron -f; done'

Cela ne fonctionne pas.

Comment faire fonctionner un service en WSL ? Ou y a-t-il un moyen d'utiliser Windows ?

Parce que sous Windows, j'ai essayé ce qui suit : en utilisant https://github.com/Microsoft/WSL/issues/612

Run: When the computer starts, 
Action: Start a program, 
Program: c:\Windows\system32\bash.exe, 
Arguments: -c "sudo  /xmr-stak-cpu/bin/xmr-stak-cpu -D"
Start in:  /usr/local/src/

Et comme vous l'avez deviné, ça ne marche toujours pas. Franchement, j'aimerais pouvoir faire cela en WSL, car c'est ma méthode préférée, mais je suis prêt à tout.

J'ai une station de travail avec 96 Go de RAM et je préfère donc l'utiliser comme double machine Linux/Windows plutôt que comme mon petit ordinateur portable.

J'ai effectué des tâches sous Linux et Windows et j'ai vraiment besoin/préfère la solution Linux fournie par Windows.

J'ai examiné l'autre question et il y a un paquet appelé Mysys qui semble fournir une solution, mais cela s'écarte de l'intégration fournie par Microsoft qui était une grande voie à suivre.

3voto

Nina Points 11

Télécharger ce -> https://github.com/troytse/wsl-autostart

Et au lieu de suivre les instructions pour mettre en place dans le registre/la politique de groupe/le taschd, il suffit de déposer un raccourci pour start.vbs dans votre dossier de démarrage :

"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"

Ou le dossier de démarrage du système

"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"

Fonctionne très bien !

3voto

NitroAMD Points 11

D'après ce que je vois, toutes les solutions ici s'exécutent juste au moment où l'utilisateur se connecte. Cela ne correspond peut-être pas exactement au besoin as windows starts . Juste pour mentionner : Vous pouvez également utiliser le planificateur de tâches de Windows pour l'exécution de tâches par un déclencheur donné. Vous voulez peut-être faire un essai.
Mais maintenant, la nouvelle solution, que j'utilise pour moi-même : Avec le logiciel Gestionnaire de service non suceur vous pouvez exécuter n'importe quel programme en tant que service Windows. Avec ça, j'ai enveloppé le démarrage de jupyter-notebook dans WSL2 (cela fonctionnait aussi très bien dans WSL1) en tant que service lors du démarrage de l'ordinateur, sans se connecter - dans le contexte d'un utilisateur.

Si vous le souhaitez, vous pouvez consulter les commandes vidées suivantes à titre d'exemple. Mais n'ayez crainte, vous pouvez aussi utiliser une interface graphique.

nssm.exe install Jupyter c:\Windows\System32\wsl.exe
nssm.exe set Jupyter AppParameters "--distribution Debian --exec jupyter-notebook --no-browser --NotebookApp.token=''  --NotebookApp.disable_check_xsrf=True"
nssm.exe set Jupyter AppDirectory C:\Users\USER\jupyter
nssm.exe set Jupyter AppExit Default Restart
nssm.exe set Jupyter AppNoConsole 1
nssm.exe set Jupyter AppPriority IDLE_PRIORITY_CLASS
nssm.exe set Jupyter AppStdout C:\Users\USER\.jupyter\jupyter.stdout
nssm.exe set Jupyter AppStderr C:\Users\USER\.jupyter\jupyter.stderr
nssm.exe set Jupyter AppRotateFiles 1
nssm.exe set Jupyter AppRotateOnline 1
nssm.exe set Jupyter AppTimestampLog 1
nssm.exe set Jupyter DisplayName Jupyter
nssm.exe set Jupyter Start SERVICE_DELAYED_AUTO_START
nssm.exe set Jupyter Type SERVICE_WIN32_OWN_PROCESS

Comme vous le voyez, la création et la rotation des fichiers journaux sont également possibles.

3voto

Diversity Points 31

La solution apportant des changements uniquement à l'intérieur de la distro WSL, vous permettant de faire démarrer les services (s'ils n'ont pas encore été démarrés) à chaque fois que vous lancez votre Shell :

  1. (extrait de wsl-autostart ) Editer /etc/sudoers : Trouvez la partie du texte sous # Allow members of group sudo to execute any command et insérez la ligne suivante (-s) à la fin :

    %sudo ALL=NOPASSWD: /etc/init.d/<service name> - pour chaque service

  2. Modifier ~/.bashrc o ~/.zshrc ou autre (selon le Shell que vous utilisez), ajoutez la ligne(-s) :

    ps -C <service name> &> /dev/null || sudo /etc/init.d/<service name> start &> /dev/null - pour chaque service

    Vérifiez-le soigneusement car <service name> dans la première et la deuxième partie de l peuvent différer.

J'espère que cette solution répondra à vos besoins. Merci.

2voto

Shadi Namrouti Points 121

Cela consiste en deux étapes importantes :

1) Désactiver la demande de mot de passe pour sudo dans WSL (sous WSL)

sudo visudo
#add at the bottom
yourUserName ALL=(ALL) NOPASSWD: ALL

2) Planificateur de tâches/ taskschd.msc (sous Windows)

Créez une tâche de base à exécuter au démarrage de Windows avec autant de commandes sous la forme suivante :

wsl sudo service ssh start
wsl sudo service nginx start
#...etc.

1voto

Laraveldeep Points 121

J'ai remarqué la même chose. Je dois démarrer mon maïs, nginx, mysql, elasticsearch etc. etc. manuellement après chaque redémarrage. C'est parce que systemd n'est pas pris en charge par le WSL. J'utilise actuellement WSL 2.

Ma solution simple à cela est un bash script pour démarrer tous les services l'un après l'autre

Par exemple start_services.sh (le tout dans une seule ligne avec ; enfin) :

sudo service cron start ; sudo service php7.4-fpm start ; sudo service elasticsearch start ; sudo service mysql start ; sudo service nginx start ;

De même, j'ai d'autres scripts to restart y to stop les services.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X