Спасибо за ваш вопрос, он направил меня к этому решению. Это моё полное, обобщённое и частное решение. Он состоит из 3 шагов:
- Создать cronjob
- Запустить / включить службу cronjob при запуске
- Удалите запрос пароля для автоматического запуска службы cronjob.
На самом деле ваша проблема уже решена с помощью шагов 2 и 3, но, поскольку вы пытались сделать это с помощью cronjob, я также добавил этот шаг для полноты.
1. Создание работающего cronjob:
- Перейдите в папку
/etc/
- Затем в папке
/etc/
введите:sudo nano crontab
- В этом файле с именем crontab введите вашу команду.
- Например:
*/1 * * * * root touch /var/www/myFile
- Чтобы создать файл с именем
myFile
в местоположении /var/www/
каждую минуту. - Для полноты: это
*/1 * * * * root touch /var/www/myFile
будет означать: создавать этот файл каждую первую минуту часа.
Пример crontab
файла может выглядеть следующим образом (я добавил только последнюю строку, остальное уже было в моей настройке):
# /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. Включение службы cronjob
Для автоматического запуска команды при запуске WSL Ubuntu 16.04 вы можете:
- CD для
/home/<your ubuntu user name>
sudo nano .bashrc
- Затем текстовый редактор nano создает / открывает файл
.bashrc
- В этом файле может быть показано много примеров, чтобы просто выполнить команду при запуске WSL Ubuntu 16.04, напишите свою команду в первой строке
.bashrc
файла. - Например:
echo "hello world"
как показано на рисунке ниже. - Для вашей конкретной проблемы конкретным решением будет ввести строку:
sudo ./xmr-stak-cpu
- Закройте редактор с помощью:
ctrl+x
- Сохраните файл с
Y
- Выход из убунту
- Перезапустите Ubuntu и убедитесь, что hello world напечатан перед вашим именем пользователя.
! [Пример команды в .bashrc, которая выполняется при загрузке ubuntu WSL.] 1
Например, это может выглядеть, как вы .bashrc
выглядите после того, как вы его отредактировали: (Я добавил только первую строку сверху, остальное уже было в моей настройке.)
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
Вы можете заменить hello world
команду на, sudo service cron start
чтобы включить службу cronjob. Однако тогда вы все равно должны ввести свой пароль вручную.
3. Удаление подсказки для пароля: Использование: https://askubuntu.com/questions/147241/execute-sudo-without-password
- Откройте WSL Ubuntu 16.04 (терминал)
sudo visudo
- Внизу файла добавьте строку:
<your WSL ubuntu username> ALL=(ALL) NOPASSWD: ALL
- Например, с именем пользователя zq вы должны добавить следующую строку в конец файла:
zq ALL=(ALL) NOPASSWD: ALL
- Ctrl + X для выхода
y
с последующим <enter>
сохранением. - Затем снова закройте Ubuntu, снова откройте его и проверьте
- Служба cron запускается автоматически при загрузке / открытии WSL Ubuntu 16.04 без запроса пароля.
- (вы можете проверить с помощью команды:.
sudo service cron status
)
Например, код для предотвращения запроса пароля при загрузке будет выглядеть (я добавил только последнюю строку, остальное уже было в моей настройке):
# # 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
Работая над этим решением, я узнал, что cronjobs предназначены для периодического запуска, а не для определенных событий, таких как запуск. Для запуска вещей при запуске в WSL вы можете использовать файл /home/<username>/.bashrc
.