如何在 WSL 中运行服务

sea*_*nbw 7 cron services windows-subsystem-for-linux

搜了这个网站和各种Q,很明显WSL是没有services和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
Run Code Online (Sandbox Code Playgroud)

我也这样做了:

启动时运行 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'
Run Code Online (Sandbox Code Playgroud)

这是行不通的。

如何在 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/
Run Code Online (Sandbox Code Playgroud)

正如您所猜测的,它仍然不起作用。坦率地说,我希望我能在 WSL 中做到这一点,因为这是我的首选方式,但我会采取任何方式。请帮助伙计们。

Dav*_*ter 3

WSL 可以\xe2\x80\x99t 运行真正的服务,而无需 Windows 主机系统的额外支持和配置,因为它缺少 \xe2\x80\x9cinit\xe2\x80\x9d 守护程序以及其他子系统和功能,这些都已成熟Linux系统有。这些差异在 Ask Ubuntu 上不是主题,但欢迎您\xe2\x80\x99 在我们的姊妹网站超级用户上询问。

\n


Win*_*nix 1

2019 年 8 月 25 日更新

\n

来自:WSL 实践:执行日常任务无需cron. systemd我总结了下面的链接,但请访问完整的故事和屏幕截图。

\n

运行 Cron 作业

\n

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

\n

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

\n

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

\n

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

\n

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

\n
#! /bin/bash\ndate >> /tmp/MyDate.txt\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

接下来,我在 cron 中添加了一个条目来运行crontab \xe2\x80\x93e,并将以下行添加到 crontab 中:

\n
40,45,50 * * * * /home/user01/MyDate.sh\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

\n
\n

2018年4月的原始答案

\n

谷歌搜索返回的超级用户答案已经过时。Microsoft 提供了本机后台 WSL 任务支持和启动服务。这篇2017 年 12 月 4 日的文章介绍了如何设置它。

\n
\n

计划任务脚本

\n

您的cron脚本包含这一行:

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