sea*_*nbw 45 linux cron ubuntu windows-subsystem-for-linux
搜了这个网站和各种Q后,很明显systemd
WSL的服务和不可用。每次启动 PC 时,我都需要在 WSL 中运行一个程序,因此我阅读了有关如何使用 crontab 的页面:如何在 Windows 上运行 Ubuntu 服务(启动时)?超级用户,但我感到困惑,因为格式与 crontab 中的格式不符。
此外,该特定问题是特定于 SSH 服务器的,如果考虑并处理导致步骤过于复杂,则需要安全方面。无论如何,该问题中探索的步骤已经尝试过,但没有奏效。此外,该问题高度针对 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
Run Code Online (Sandbox Code Playgroud)
我也这样做了:
启动时运行 bash/cron 循环
在 shell:startup 中创建一个名为 linux.bat 的文件
Paste: C:\Windows\System32\bash.exe -c 'while [ true ]; do sudo /usr/sbin/cron -f; done'
Run Code Online (Sandbox Code Playgroud)
这是行不通的。
如何在 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/
Run Code Online (Sandbox Code Playgroud)
正如您所猜测的,它仍然不起作用。坦率地说,我希望我能在 WSL 中做到这一点,因为这是我的首选方式,但我会采取任何方式。
我有一个带有 96GB RAM 的工作站,因此我更愿意将它用作双 Linux/Windows 机器而不是我的小笔记本电脑。
我在 Linux 和 Windows 上都有任务,真的需要/更喜欢 Windows 提供的 Linux 解决方案。
我已经查看了另一个问题,有一个名为 Mysys 的软件包似乎提供了一个解决方案,但这与 Microsoft 提供的集成背道而驰,这是一个很好的前进方向。
Not*_*1ds 45
更新:WSL 现在包含启用 Systemd 的功能,显然可以在 WSL 发行版启动时使用 Systemd(正如最初提出的问题)来运行服务。但是,如果这是您需要 Systemd 的唯一原因,那么下面的答案可能是更好的选择,因为它避免了 Systemd 的额外开销和复杂性
随着 Windows 11 的发布,WSL 中添加了一项新功能来解决这个问题。如果您从 Microsoft Store安装 WSL,现在 Windows 10 用户也可以使用此功能(需要KB5020030,它应该在可选更新下提供)。
要在 WSL 启动时运行任意命令,请使用以下内容创建或编辑(如sudo
) :/etc/wsl.conf
[boot]
command = <command to run as root>; <other command to run as root>
Run Code Online (Sandbox Code Playgroud)
cron
如果您使用此方法(例如或)运行服务,请注意,当最后一个交互式sshd
启动的进程完成时,WSL 分发仍将自动终止。您可以在我对询问 Ubuntu 问题是否可以在后台运行 WSL 应用程序的回答中看到更多讨论(以及使用 的解决方法)。。keychain
例如:
[boot]
command="service ssh start; service cron start"
Run Code Online (Sandbox Code Playgroud)
这些命令以 root 身份运行,因此无需使用sudo
密码。
请注意(至少目前)如果您尝试有多command=
行,则只会执行最后一行。如果您需要在启动时运行多个命令,请像上面那样用分号分隔它们。
如果您需要在Windows登录时启动这些服务,只需在登录时创建一个计划任务即可wsl true
。这将启动您的 WSL 实例,触发boot
上述命令。
Jai*_*ime 28
在 WSL 中,linux 发行版仅在调用第一个 linux 命令后运行。如果你想运行一个 linux 守护进程(一个服务),你必须在 linux 中配置服务器并运行该 linux 发行版中的任何命令。
有许多页面和答案显示了如何创建一个脚本来在您的计算机启动时启动 WSL linux。
commands.txt
使用自定义 linux 命令进行更改。gpedit.msc
命令)或在启动时运行的计划任务(使用)来运行taskschd.msc
。注意:如果您的程序必须使用 来执行sudo
,您必须将其配置为在不询问密码的情况下启动程序。
visudo
在linux下运行,在文件末尾添加一行:%sudo ALL=NOPASSWD: /full/path/to/program
小智 23
我的 mysql 服务示例
创建行/etc/sudoers
(在 WSL 以防止询问密码):
%sudo ALL=(ALL) NOPASSWD: /usr/sbin/service mysql start
Run Code Online (Sandbox Code Playgroud)
.bat
使用此行在 Windows 启动目录中创建文件(目录在此处找到:Win+R和shell:startup
):
wsl sudo service mysql start
Run Code Online (Sandbox Code Playgroud)
重新启动服务后,它会自动启动。
Ale*_*ing 11
另外一个选择:
/etc/init-wsl
:#!/bin/sh
echo booting
service ssh start
Run Code Online (Sandbox Code Playgroud)
并使脚本可执行
chmod +x /etc/init-wsl
由于wsl.exe
能够在 wsl 发行版中运行命令,我们只需安排通过命令运行此文件wsl -u root /etc/init-wsl
。如果您有多个发行版,您可能需要指定带有标志的-d
发行版,例如wsl -d Ubuntu-20.04 -u root /etc/init-wsl
归档时间: |
|
查看次数: |
80814 次 |
最近记录: |