Obrigado pela sua pergunta, ela me orientou para essa solução. Esta é a minha solução completa, generalizada e particular. Consiste em 3 etapas:
- Crie um cronjob
- Executar / ativar o serviço de tempo de execução na inicialização
- Remova a solicitação de senha para iniciar o serviço de tempo de execução automaticamente.
Na realidade, seu problema já está resolvido com apenas os passos 2 e 3, mas desde que você tentou fazer isso com um cronjob, eu também adicionei essa etapa para completar.
1. Criando um cronjob funcional:
- Navegue até a pasta
/etc/
- Em seguida, na pasta
/etc/
enter: sudo nano crontab
- Nesse arquivo chamado crontab, digite seu comando.
- Por exemplo:
*/1 * * * * root touch /var/www/myFile
- Para criar um arquivo chamado
myFile
na localização /var/www/
a cada minuto.
- Para a conclusão:
*/1 * * * * root touch /var/www/myFile
significaria: criar esse arquivo a cada primeiro minuto da hora.
Um exemplo do arquivo crontab
poderia parecer (eu adicionei somente a última linha, o resto já estava lá na minha configuração):
# /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. Ativando o serviço de tempo de execução
Para executar um comando automaticamente na inicialização do WSL Ubuntu 16.04, você pode:
- cd para
/home/<your ubuntu user name>
-
sudo nano .bashrc
- O editor de texto nano cria / abre um arquivo
.bashrc
- Nesse arquivo, muitos exemplos já podem ser mostrados, para apenas executar o seu comando na inicialização do WSB ubuntu 16.04, escreva seu comando na primeira linha do arquivo
.bashrc
.
- Por exemplo:
echo "hello world"
como mostrado na figura abaixo.
- Para o seu problema específico, a solução específica seria inserir a linha:
sudo ./xmr-stak-cpu
- Feche o editor com:
ctrl+x
- Salve o arquivo com
Y
- Saia do Ubuntu
- Reinicie o Ubuntu e verifique se o mundo hello foi impresso antes do seu nome de usuário.
! [Um exemplo de comando no .bashrc que é executado na inicialização do WSL
ubuntu.] 1
Por exemplo, este pode ser o seu .bashrc
depois que você o editou: (Eu só adicionei a primeira linha no topo, o resto já estava lá na minha configuração.)
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
Você pode substituir o comando hello world
por sudo service cron start
para ativar o serviço de tempo de execução. No entanto, você ainda precisará inserir sua senha manualmente.
3. Removendo o prompt de senha:
Usando: link
- Abra o WSB ubuntu 16.04 (terminal)
-
sudo visudo
- Na parte inferior do arquivo, adicione a linha:
%código%
- Por exemplo, com o nome de usuário zq, você adicionaria a seguinte linha à parte inferior do arquivo:
-
<your WSL ubuntu username> ALL=(ALL) NOPASSWD: ALL
- ctrl + x para sair
-
zq ALL=(ALL) NOPASSWD: ALL
seguido por y
para salvar.
- Então, novamente, feche o Ubuntu e abra-o novamente e verifique
- O serviço cron está sendo executado automaticamente quando você inicializa / abre o WSL ubuntu 16.04 sem solicitar senha.
- (você pode verificar com o comando:
<enter>
.)
O código para evitar a solicitação de senha na inicialização seria, por exemplo, parecido com (eu adicionei apenas a última linha, o resto já estava lá na minha configuração):
#
# 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
Trabalhando para essa solução, eu aprendi que os cronjobs são destinados a que as coisas sejam executadas periodicamente, e não em eventos específicos, como a inicialização. Para executar as coisas na inicialização do WSL, você pode usar o arquivo sudo service cron status
.