このサイトとさまざまなQを検索した後、サービスとsystemd
がWSLで利用できないことは明らかです。 PCを起動するたびにWSLでプログラムを実行する必要があるため、crontabの使用方法について次のページを読みます。 WindowsでUbuntuサービスを実行する方法(起動時) スーパーユーザーですが、混乱しましたこのフォーマットはcrontabのフォーマットと一致しないためです。
さらに、その特定の質問はSSHサーバーに固有のものであり、SSHサーバーでは、セキュリティの側面を考慮して対処すると、手順が複雑になりすぎます。いずれにせよ、そのQusetionで検討されたステップは試されており、機能しませんでした。さらに、この質問はSSHサーバーに非常に特有ですが、この質問は一般的な環境要件iを扱います。 WSLでサービスを実行する方法を知る必要があります(SSHサーバーを含む場合がありますが、これに限定されません)
実際には、 WindowsでUbuntuサービスを実行する方法(起動時)? よりも簡単なソリューションが必要です。
しかし、これは私のcronです。
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
PATH=cd /usr/local/src/:cd xmr-stak-cpu:cd bin/
@reboot . Sudo ./xmr-stak-cpu
私もこれを行いました:
起動時にbash/cronループを実行する
Shell:startupにlinux.batというファイルを作成します
Paste: C:\Windows\System32\bash.exe -c 'while [ true ]; do Sudo /usr/sbin/cron -f; done'
それは動作しません。
WSLでサービスを実行するにはどうすればよいですか?または、Windowsを使用する方法はありますか?
Windowsで次のことを試したので: https://github.com/Microsoft/WSL/issues/612 を使用します
Run: When the computer starts,
Action: Start a program,
Program: c:\Windows\system32\bash.exe,
Arguments: -c "Sudo /xmr-stak-cpu/bin/xmr-stak-cpu -D"
Start in: /usr/local/src/
そして、ご想像のとおり、それでも機能しません。率直に言って、これが私の好みの方法なので、WSLでこれを実行できればいいのにと思っていますが、私はどんな方法でもとります。
私は96GBのワークステーションを持っていますRAM=したがって、私はこれを私のLinux/Windowsデュアルマシンとして使用し、私のラップトップのラップトップとしては使用しません。
LinuxとWindowsの両方でタスクを実行しており、Windowsが提供するLinuxソリューションを本当に必要としています。
私は他の質問を確認しましたが、解決策を提供するように見えるMysysと呼ばれるパッケージがありますが、これはMicrosoftによって提供された統合とは異なり、これは素晴らしい方法でした。
WSLでは、Linuxディストリビューションは、最初のLinuxコマンドが呼び出された後にのみ実行されます。 Linuxデーモン(サービス)を実行する場合は、サーバーをLinuxで構成し、そのLinuxディストリビューションでコマンドを実行する必要があります。
コンピュータの起動時にWSL linuxを起動するスクリプトを作成する方法 を示すページと回答がたくさんあります 。
commands.txt
を変更できます。gpedit.msc
コマンドを使用)または実行時にスケジュールされたタスク(taskschd.msc
を使用)として実行するポリシーを作成するオプションもあります。注:プログラムをSudo
で実行する必要がある場合は、パスワードを要求せずにプログラムを起動するようにプログラムを構成する必要があります。
visudo
を実行し、ファイルの最後に次の行を追加します:%Sudo ALL=NOPASSWD: /full/path/to/program
ご質問ありがとうございます。この解決策に導いてくれました。これは私の完全で一般化された特定のソリューションです。 3つのステップで構成されています。
実際には、ステップ2と3だけで問題はすでに解決されていますが、cronjobでそれを試みたので、完全性のためにそのステップも追加しました。
1。機能するcronjobを作成する:
/etc/
_を参照します/etc/
_に次のように入力します:_Sudo nano crontab
_*/1 * * * * root touch /var/www/myFile
_/var/www/
_にmyFile
という名前のファイルを作成します。*/1 * * * * root touch /var/www/myFile
_は、1時間ごとにそのファイルを作成することを意味します。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の起動時にコマンドを自動的に実行するには、次のことができます。
/home/<your ubuntu user name>
_Sudo nano .bashrc
_.bashrc
_.bashrc
_ファイルの最初の行にコマンドを記述します。echo "hello world"
_下の図に示すように。Sudo ./xmr-stak-cpu
_ctrl+x
_でエディターを閉じますY
でファイルを保存します![WSL ubuntuの起動時に実行される.bashrcのコマンド例]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 "${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
_
_hello world
_ commandを_Sudo service cron start
_に置き換えて、cronjobサービスを有効にすることができます。ただし、その場合でも、手動でパスワードを入力する必要があります。
3。パスワードのプロンプトを削除:使用: https://askubuntu.com/questions/147241/execute-Sudo-without-password
Sudo visudo
_<your WSL ubuntu username> ALL=(ALL) NOPASSWD: ALL
zq ALL=(ALL) NOPASSWD: ALL
y
の後に_<enter>
_を付けて保存します。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
_を使用できます。
これをダウンロード-> https://github.com/troytse/wsl-autostart
レジストリ/グループポリシー/ taskschdで設定する手順に従う代わりに、スタートアップフォルダーにstart.vbs
のショートカットをドロップするだけです。
"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup"
またはシステム起動フォルダ
"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"
よく働く!
MySQLサービスの私の例
/etc/sudoers.d/
に行を作成します(WSLでパスワードを要求しないようにします)。
%Sudo ALL=(ALL) NOPASSWD: /usr/sbin/service mysql *
次の行を使用して、Windowsスタートアップディレクトリに.bat
ファイルを作成します(dir find here: Win+R およびShell:startup
):
wsl Sudo service mysql start
サービスを再起動すると、自動的に開始されます。