设置 cron 作业后,我尝试:当我从 Windows 应用商店打开适用于 Linux Ubuntu 16.04 的 Windows 子系统应用时自动启用 cron 服务。
目前我正尝试通过模拟来实现该目标:
- 打开 WSL Ubuntu
- 进入
sudo service cron start
<enter>
为此,我找到了 ubuntu1604.exe,让自己成为所有者,并授予自己读写和打开 ubuntu1604.exe 的权限。
接下来,我cmd
以管理员模式打开,浏览到:C:\Program Files\WindowsApps\CanonicalGroupLimited.Ubuntu16.04onWindows_1604.2018.510.0_x64__79rhkp1fndgsc
并输入:ubuntu1604.exe
以验证我是否能够从 cmd 打开 WSL ubuntu 而不会出现任何提示。 是的,因为它只是在同一个窗口中打开了 Ubuntu (由于中显示的cmd
绿色可见)。<user>@<pcname>:~$
cmd
接下来我尝试在打开 WSL Ubuntu 时向其传递一个参数:
ubuntu1604.exe run echo "hello world"
ubuntu1604.exe echo "hello world"
ubuntu1604.exe -c echo "hello world"
ubuntu1604.exe -c
然而:
- 返回
hello world
但没有打开WSL ubuntu。 - 返回有关如何启动 Linux 发行版的文档形式(附于下图)。
- 返回
hello world
但没有打开WSL ubuntu。 - 在当前cmd路径的位置打开Ubuntu,但不执行
因此我尝试使用批处理脚本或 powershell 脚本打开它:
- 批处理脚本
test1.bat
:
start /d "C:\Program Files\WindowsApps\CanonicalGroupLimited.Ubuntu16.04onWindows_1604.2018.510.0_x64__79rhkp1fndgsc" ubuntu1604.exe echo "hello world"
批处理脚本:
test2.bat
Process.Start("C:\Program Files\WindowsApps\CanonicalGroupLimited.Ubuntu16.04onWindows_1604.2018.510.0_x64__79rhkp1fndgsc\ubuntu1604.exe", "echo "hello world"");
Powershell 脚本:
test3.ps1
Process.Start("C:\Program Files\WindowsApps\CanonicalGroupLimited.Ubuntu16.04onWindows_1604.2018.510.0_x64__79rhkp1fndgsc\ubuntu1604.exe", "echo "hello world"");
- Powershell 脚本:
test4.ps1
Process.Start(“C:\Program Files\WindowsApps\CanonicalGroupLimited.Ubuntu16.04onWindows_1604.2018.510.0_x64__79rhkp1fndgsc\ubuntu1604.exe”,echo“hello world”);`
尽管:
- 打开一个大黑屏并闪烁关闭。
- Process.Start 未被识别为内部或外部命令
- 不是使用 powershell 语言
- 不是使用 powershell 语言。
现在我意识到,由于它是应用商店的一个应用程序(或出于任何其他原因),在 WSL ubuntu1604 启动时传递任何无需用户交互即可执行命令的参数的选项可能会被禁用。
因此:
- 如果有人知道我的语法是否正确但我的目的
无法通过这种方式实现,请告诉我。 - 如果这是可能的但我做错了,我将非常感激任何关于我做错的事情的反馈,或者正确的解决方案。
答案1
我认为 cronjobs 主要是为了定期运行。
要在 WSL Ubuntu 16.04 启动时自动运行命令,您可以:
- cd 到
/home/<your ubuntu user name>
sudo nano .bashrc
- 然后,文本编辑器 nano 创建/打开一个文件 .bashrc
- 在该文件中已经显示了很多示例,只需在 WSL ubuntu 16.04 启动时执行您的命令,请将您的命令写在 .bashrc 文件的第一行。
- 例如:
echo "hello world"
如下图所示。 - 使用以下命令关闭编辑器:
ctrl+x
- 使用以下方式保存文件
Y
- 退出 ubuntu
- 重新启动 ubuntu 并验证确实在您的用户名前打印了 hello world。
![.bashrc 中在 WSL ubuntu 启动时执行的示例命令。]1
您可以替换该hello world
命令以sudo service cron start
启用 cronjob 服务。但是您仍然需要手动输入密码。要解决这个问题,请使用:https://askubuntu.com/questions/147241/execute-sudo-without-password
- 打开 WSL ubuntu 16.04(终端)
sudo visudo
- 在文件底部添加行:` ALL=(ALL) NOPASSWD: ALL
- 例如,对于用户名 zq,您需要将以下行添加到文件底部:
zq ALL=(ALL) NOPASSWD: ALL
- ctrl+x 退出
y
然后<enter>
保存。- 然后再次关闭 ubuntu 并重新打开并验证
- 当您启动/打开 WSL ubuntu 16.04 时,cron 服务会自动运行,无需提示输入密码。
- (您可以使用命令检查:
sudo service cron status
。)