在搜索了此网站和各种问答后,很明显 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
。