web-dev-qa-db-ja.com

WSLでサービスを実行する方法

このサイトとさまざまなQを検索した後、WSLでservicesおよびsystemdを使用できないことは明らかです。 PCを起動するたびにWSLでプログラムを実行する必要があるので、crontabの使用方法に関するこのページを読みます: WindowsでUbuntuサービスを実行する方法(起動時)? |スーパーユーザー が、フォーマットがcrontabのフォーマットと一致しないため、混乱しました。しかし、これは私の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ループを実行する

Create a file called linux.bat in Shell:startup 

Paste: C:\Windows\System32\bash.exe -c 'while [ true ]; do Sudo /usr/sbin/cron -f; done'

それは動作しません。

WSLでサービスを実行するにはどうすればよいですか?確かに、Linuxのphdである必要のない方法がなければなりませんか?または、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でこれができることを望んでいます。なぜなら、それが私の好みの方法であるからです。みんな助けてください。

5
seanbw

WSLは、Windowsホストシステムの追加のサポートと設定なしでは、真のサービスを実行できません。これは、すべての本格的なLinuxシステムにある他のサブシステムと機能の中で「init」デーモンがないためです。このような違いは、Ask Ubuntuのトピックから外れていますが、姉妹サイト Super User でお気軽にお問い合わせください。

3
David Foerster

2019年8月25日更新

From: WSLの実践:毎日のタスクの実行cronなしでsystemdを実行できます。以下のリンクをまとめましたが、スクリーンショットとともに完全なストーリーをご覧ください。

Cronジョブの実行

毎日同じ時間に同じスクリプトまたはプログラムを実行する必要がある場合、Ubuntuはcronコマンドを提供します。 cronコマンドの詳細については、man cronと入力してください。

Cronは、バックグラウンドサービスであるため、WSLで現在サポートされていません。WSLは、ターミナルウィンドウに関連付けられているプログラムを実行するように設計されています。したがって、WSL Ubuntuウィンドウを閉じると、cronデーモンを含むすべてのLinuxプロセスが閉じられます。とは言っても、ウィンドウを開いているか最小化している限り、cronジョブは引き続き実行されます。

最初にservice --status-allと入力して、cronサービスが実行されているかどうかを確認しました。これにより、cronの前にダッシュ(「-」)が表示され、実行されていないことが示されました。

次に、service cron startおよびservice atd startと入力して、cronおよびatdサービスを開始しました。

Cronコマンドをテストするために、次の2行を含むMyDate.shという名前のファイルを作成しました。

#! /bin/bash
date >> /tmp/MyDate.txt

1行目はUbuntuにBashシェルを使用してコマンドを実行するように指示し、2行目は現在の日時を/tmp/MyDate.txtというファイルに書き込みます。次に、chmod 755 MyDate.shを実行して、プログラムを実行可能にしました。

次に、crontab –eを実行して実行するcronのエントリを追加し、次の行をcrontabに追加しました。

40,45,50 * * * * /home/user01/MyDate.sh

この行は、毎日1時間ごとにMyDate.shを40、45、および50分実行するようにcronに指示します。

1時間待った後、/ tmp/MyDate.txtファイルを見て、指定された時間にMyDate.shが実行されたことを確認しました。最初の2つのエントリは、プログラムを手動で実行した2回のものです。


2018年4月からの元の回答

Google検索が返す スーパーユーザー の回答は古くなっています。 Microsoftは、ネイティブのバックグラウンドWSLタスクのサポートとスタートアップサービスを提供しています。この 2017年12月4日の記事 では、設定方法を説明しています。


Cronスクリプト

cronスクリプトには次の行が含まれています。

@reboot . Sudo ./xmr-stak-cpu
  • 最初の.が何をするのかわからない。削除すべきだと思います。
  • 最初にcrontab -eジョブがルートとして実行されるため、Sudoは不要です。
  • コマンド./xmr-stak-cpuは、/usr/local/bin/xmr-stak-cpuまたは/home/<your name>/bin/xmr-stak-cpuのようなものでなければなりません。
1