如何在 WSL 中运行服务

如何在 WSL 中运行服务

在搜索了此网站和各种问答后,很明显 WSL 不提供服务和 systemd。每次启动电脑时,我都需要在 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 博士?或者有没有办法使用 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 中做到这一点,因为这是我首选的方式,但我愿意采取任何方式。请大家帮助我。

答案1

如果没有 Windows 主机系统的额外支持和配置,WSL 就无法运行真正的服务,因为它缺少“init”守护进程以及其他子系统和所有成熟的 Linux 系统都具有的功能。这些差异与 Ask Ubuntu 无关,但欢迎您在我们的姊妹网站上提问超级用户

答案2

2019 年 8 月 25 日更新

从:亲身体验 WSL:执行日常任务cron无需即可运行systemd。我已在下面总结了链接,但请访问以查看完整故事以及屏幕截图。

运行 Cron 作业

如果您需要每天在同一时间运行相同的脚本或程序,Ubuntu 提供了 cron 命令。要了解有关该cron命令的更多信息,请输入man cron

Cron 目前在 WSL 中没有得到很好的支持,因为它是一项后台服务,并且 WSL 仅设计用于运行与终端窗口关联的程序。因此,当您关闭 WSL Ubuntu 窗口时,所有 Linux 进程(包括 cron 守护程序)都将关闭。也就是说,只要您打开或最小化窗口,您的 cron 作业就会继续运行。

我首先通过输入来检查 cron 服务是否正在运行service --status-all。结果显示 cron 前面有一个破折号(“-”),表示它没有运行。

service cron start然后我通过输入:和来启动 cron 和 atd 服务service atd start

为了测试 cron 命令,我创建了一个名为的文件MyDate.sh,其中包含以下两行:

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

第一行告诉 Ubuntu 使用 Bash shell 运行命令,第二行将当前日期和时间写入名为 的文件/tmp/MyDate.txt。然后我运行chmod 755 MyDate.sh以允许程序可执行。

接下来,我在 cron 中添加了一个通过运行来运行的条目crontab –e,并在 crontab 中添加了以下行:

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

MyDate.sh此行告诉 cron每天每小时的 40、45 和 50 分钟运行。

等了一个小时后,我查看了 /tmp/MyDate.txt 文件,发现 MyDate.sh 确实在指定的时间运行。前两个条目来自我手动运行该程序的两次。


2018 年 4 月的原始答案

超级用户谷歌搜索返回的答案已经过时了。微软已经提供了原生的后台 WSL 任务支持和启动服务。这2017 年 12 月 4 日文章描述如何设置。


Cron 脚本

您的cron脚本包含以下行:

@reboot . sudo ./xmr-stak-cpu
  • 我不确定第一个.应该做什么。我认为应该将其删除。
  • sudo这不是必需的,因为crontab -e作业首先以 root 身份运行。
  • 该命令./xmr-stak-cpu应该类似于/usr/local/bin/xmr-stak-cpu/home/<your name>/bin/xmr-stak-cpu

相关内容