Dziękuję za pytanie, które doprowadziło mnie do tego rozwiązania. To jest moje kompletne, uogólnione i szczególne rozwiązanie. Składa się z 3 kroków:
- Stwórz cronjob
- Uruchom / włącz usługę cronjob przy starcie
- Usuń monit o hasło, aby automatycznie uruchomić usługę cronjob.
W rzeczywistości twój problem został już rozwiązany tylko za pomocą kroku 2 i 3, ale ponieważ próbowałeś zrobić to za pomocą cronjob, dodałem również ten krok dla kompletności.
1. Tworzenie działającego zadania cron:
- Przejdź do folderu
/etc/
- Następnie w folderze
/etc/
wprowadź:sudo nano crontab
- W tym pliku o nazwie crontab wprowadź swoje polecenie.
- Na przykład:
*/1 * * * * root touch /var/www/myFile
- Aby utworzyć plik nazwany
myFile
w lokalizacji /var/www/
co minutę.
- Kompletność:
*/1 * * * * root touch /var/www/myFile
oznaczałoby: tworzenie tego pliku co 1 minutę godziny.
Przykład crontab
pliku może wyglądać (dodałem tylko ostatnią linię, reszta była już w mojej konfiguracji):
# /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. Włączanie usługi cronjob
Aby automatycznie uruchomić polecenie podczas uruchamiania WSL Ubuntu 16.04, możesz:
- cd do
/home/<your ubuntu user name>
sudo nano .bashrc
- Edytor tekstu nano tworzy / otwiera plik
.bashrc
- W tym pliku można już pokazać wiele przykładów, aby po prostu uruchomić polecenie po uruchomieniu WSL ubuntu 16.04, wpisz polecenie w pierwszym wierszu
.bashrc
pliku.
- Na przykład:
echo "hello world"
jak pokazano na rysunku poniżej.
- W przypadku konkretnego problemu, szczególnym rozwiązaniem byłoby wprowadzenie linii:
sudo ./xmr-stak-cpu
- Zamknij edytor za pomocą:
ctrl+x
- Zapisz plik za pomocą
Y
- Wyjdź z ubuntu
- Uruchom ponownie ubuntu i sprawdź, czy świat hello jest wydrukowany przed nazwą użytkownika.
! [Przykładowa komenda w .bashrc, która jest wykonywana podczas uruchamiania WSL ubuntu.] 1
Na przykład może to być to, .bashrc
jak wygląda Twój wygląd po edycji: (Dodałem tylko pierwszą linię na górze, reszta była już w mojej konfiguracji).
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
Możesz zastąpić hello world
polecenie, sudo service cron start
aby włączyć usługę cronjob. Jednak nadal musisz ręcznie wprowadzić hasło.
3. Usuwanie pytania o hasło:
Używając: https://askubuntu.com/questions/147241/execute-sudo-without-password
- Otwórz WSL ubuntu 16.04 (terminal)
sudo visudo
- Na dole wiersza dodawania plików:
<your WSL ubuntu username> ALL=(ALL) NOPASSWD: ALL
- Np. Przy użyciu nazwy użytkownika zq dodajesz następujący wiersz na dole pliku:
zq ALL=(ALL) NOPASSWD: ALL
- ctrl + x, aby wyjść
y
następnie, <enter>
aby zapisać.
- Następnie ponownie zamknij ubuntu i otwórz je ponownie i sprawdź
- Usługa cron działa automatycznie po uruchomieniu / otwarciu WSL ubuntu 16.04 bez pytania o hasło.
- (możesz to sprawdzić poleceniem:.
sudo service cron status
)
Kod uniemożliwiający monitowanie o hasło przy rozruchu wyglądałby na przykład (dodałem tylko ostatnią linię, reszta była już w mojej konfiguracji):
#
# 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
Pracując nad tym rozwiązaniem, dowiedziałem się, że cronjobs są przeznaczone do okresowego uruchamiania rzeczy, a nie do określonych zdarzeń, takich jak uruchamianie. Aby uruchomić rzeczy podczas uruchamiania w WSL, możesz użyć pliku /home/<username>/.bashrc
.