Merci pour votre question, elle m'a guidé vers cette solution. Voici ma solution complète, généralisée et particulière. Elle se compose de 3 étapes :
- Créer un cronjob
- Exécuter/activer le service cronjob au démarrage
- Supprimez la demande de mot de passe pour démarrer le service cronjob automatiquement.
En réalité, votre problème est déjà résolu avec seulement les étapes 2 et 3, mais puisque vous avez essayé de le faire avec un cronjob, j'ai également ajouté cette étape pour être complet.
1. Créer un cronjob fonctionnel :
- Parcourir le dossier
/etc/
- Puis dans le dossier
/etc/
Entrez : sudo nano crontab
- Dans ce fichier nommé crontab, entrez votre commande.
- Par exemple :
*/1 * * * * root touch /var/www/myFile
- Pour créer un fichier nommé
myFile
à l'emplacement /var/www/
chaque minute.
- Pour être complet :
*/1 * * * * root touch /var/www/myFile
signifierait : créer ce fichier toutes les 1ères minutes de l'heure.
Un exemple de la crontab
pourrait ressembler (je n'ai ajouté que la dernière ligne, le reste était déjà présent dans mon installation) :
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
*/2 * * * * root touch /var/www/myFile
2. Activer le service cronjob
Pour exécuter une commande automatiquement au démarrage de WSL Ubuntu 16.04 vous pouvez :
- cd à
/home/<your ubuntu user name>
sudo nano .bashrc
- L'éditeur de texte nano crée/ouvre alors un fichier
.bashrc
- Dans ce fichier, de nombreux exemples peuvent déjà être montrés, pour simplement exécuter votre commande au démarrage de la WSL ubuntu 16.04, écrivez votre commande sur la première ligne du fichier
.bashrc
fichier.
- Par exemple :
echo "hello world"
comme le montre l'image ci-dessous.
- Pour votre problème particulier, la solution particulière serait d'entrer la ligne :
sudo ./xmr-stak-cpu
- Fermez l'éditeur avec :
ctrl+x
- Enregistrez le fichier avec
Y
- Quitter ubuntu
- Redémarrez ubuntu et vérifiez que le hello world est bien imprimé avant votre nom d'utilisateur.
![Un exemple de commande dans .bashrc qui est exécutée au démarrage de WSL ubuntu]. 1
Par exemple, cela pourrait être ce que votre .bashrc
ressemble après que vous l'ayez modifié : (j'ai seulement ajouté la première ligne en haut, le reste était déjà là dans ma configuration).
sudo -i service cron start
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
Vous pouvez remplacer le hello world
avec sudo service cron start
pour activer le service cronjob. Cependant, vous devez toujours entrer votre mot de passe manuellement.
3. Suppression de la demande de mot de passe : Utilisation : https://askubuntu.com/questions/147241/execute-sudo-without-password
- Ouvrir WSL ubuntu 16.04 (terminal)
sudo visudo
- Au bas du fichier, ajoutez la ligne :
<your WSL ubuntu username> ALL=(ALL) NOPASSWD: ALL
- Par exemple, avec le nom d'utilisateur zq, vous devez ajouter la ligne suivante au bas du fichier :
zq ALL=(ALL) NOPASSWD: ALL
- ctrl+x pour quitter
-
y
suivi par <enter>
à sauver.
- Encore une fois, fermez ubuntu et rouvrez-le et vérifiez
- Le service cron est exécuté automatiquement lorsque vous démarrez/ouvrez WSL ubuntu 16.04 sans demander de mot de passe.
- (vous pouvez vérifier avec la commande :
sudo service cron status
.)
Le code pour empêcher la demande de mot de passe au démarrage ressemblerait par exemple à (je n'ai ajouté que la dernière ligne, le reste était déjà présent dans ma configuration) :
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/s$
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
%sudo ALL=NOPASSWD: /etc/init.d/cron
zq ALL=(ALL) NOPASSWD: ALL
En travaillant sur cette solution, j'ai appris que les cronjobs sont destinés à exécuter des choses périodiquement plutôt qu'à des événements spécifiques comme le démarrage. Pour exécuter des choses au démarrage dans WSL, vous pouvez utiliser le fichier /home/<username>/.bashrc
.