Vielen Dank für Ihre Frage, sie hat mich zu dieser Lösung geführt. Dies ist meine vollständige, verallgemeinerte und besondere Lösung. Es besteht aus 3 Schritten:
- Erstellen Sie einen Cronjob
- Den cronjob-Dienst beim Start ausführen / aktivieren
- Entfernen Sie die Aufforderung zur Eingabe eines Kennworts, um den Cronjob-Dienst automatisch zu starten.
In der Realität ist Ihr Problem bereits mit den Schritten 2 und 3 gelöst, aber da Sie versucht haben, dies mit einem Cronjob zu tun, habe ich diesen Schritt der Vollständigkeit halber hinzugefügt.
1. Einen funktionierenden Cronjob erstellen:
- Navigieren Sie zum Ordner
/etc/
- Dann in Ordner
/etc/
eingeben:sudo nano crontab
- Geben Sie in dieser Datei namens crontab Ihren Befehl ein.
- Z.B:
*/1 * * * * root touch /var/www/myFile
- Jede Minute eine Datei mit dem Namen "
myFile
location" erstellen /var/www/
. - Für die Vollständigkeit:
*/1 * * * * root touch /var/www/myFile
würde bedeuten: Erstellen Sie diese Datei jede 1. Minute der Stunde.
Ein Beispiel für die crontab
Datei könnte aussehen (ich habe nur die letzte Zeile hinzugefügt, der Rest war bereits in meinem Setup vorhanden):
# /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. Aktivieren des Cronjob-Dienstes
Um einen Befehl automatisch beim Start von WSL Ubuntu 16.04 auszuführen, können Sie:
- CD zu
/home/<your ubuntu user name>
sudo nano .bashrc
- Der Texteditor nano erstellt / öffnet dann eine Datei
.bashrc
- In dieser Datei können bereits viele Beispiele gezeigt werden. Um Ihren Befehl beim Start der WSL ubuntu 16.04 auszuführen, schreiben Sie Ihren Befehl in die erste Zeile der
.bashrc
Datei. - Zum Beispiel:
echo "hello world"
wie im Bild unten gezeigt. - Für Ihr spezielles Problem wäre die spezielle Lösung die Eingabe der Zeile:
sudo ./xmr-stak-cpu
- Schließen Sie den Editor mit:
ctrl+x
- Speichern Sie die Datei mit
Y
- Beenden Sie Ubuntu
- Starten Sie ubuntu neu und überprüfen Sie, ob die Hallo-Welt vor Ihrem Benutzernamen gedruckt wird.
! [Ein Beispielbefehl in .bashrc, der beim Booten von WSL Ubuntu ausgeführt wird.] 1
Zum Beispiel könnte dies .bashrc
nach dem Bearbeiten so aussehen: (Ich habe nur die erste Zeile oben hinzugefügt, der Rest war bereits in meinem Setup vorhanden.)
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 "$" ] && [ -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
Sie können den hello world
Befehl durch ersetzen sudo service cron start
, um den Cronjob-Dienst zu aktivieren. Dann müssen Sie Ihr Passwort jedoch noch manuell eingeben.
3. Eingabeaufforderung für Kennwort entfernen: Verwenden Sie Folgendes : https://askubuntu.com/questions/147241/execute-sudo-without-password
- WSL ubuntu 16.04 (Terminal) öffnen
sudo visudo
- Am Ende der Datei-Zeile hinzufügen:
<your WSL ubuntu username> ALL=(ALL) NOPASSWD: ALL
- Mit dem Benutzernamen zq würden Sie beispielsweise die folgende Zeile am Ende der Datei einfügen:
zq ALL=(ALL) NOPASSWD: ALL
- Strg + x zum Beenden
y
gefolgt von <enter>
zum Speichern. - Dann wieder schließen Sie Ubuntu und öffnen Sie es erneut und überprüfen Sie
- Der Cron-Dienst wird automatisch ausgeführt, wenn Sie WSL ubuntu 16.04 starten / öffnen, ohne das Kennwort einzugeben.
- (Sie können mit dem Befehl überprüfen:.
sudo service cron status
)
Der Code zum Verhindern der Aufforderung zur Eingabe eines Kennworts beim Boot würde beispielsweise so aussehen (ich habe nur die letzte Zeile hinzugefügt, der Rest war bereits in meinem Setup vorhanden):
# # 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
Auf diese Lösung hin habe ich gelernt, dass Cronjobs dazu gedacht sind, dass Dinge regelmäßig ausgeführt werden und nicht bei bestimmten Ereignissen wie dem Startup. Um Dinge beim Start in WSL auszuführen, können Sie die Datei verwenden /home/<username>/.bashrc
.