首页 » Ubuntu » WSL(Windows Subsystem for Linux)使用笔记

WSL(Windows Subsystem for Linux)使用笔记

2016-12-07 15:10:16阅读(181)

1. 下载安装

ubuntu子系统是从Windows应用商店下载的,由于网络等诸多原因可能无法顺利下载。此时解决的思路是,下载离线的安装包trusty-server-cloudimg-amd64-root.tar.gz,然后使用fiddler的autoresponse功能,把离线包作为http下载的返回。具体参见:http://jingyan.baidu.com/article/bea41d4386bbf2b4c51be6bc.html

2. Nginx无法启动的问题。
 apt install nginx
 service nginx start

发现/var/log/nginx/error.log中有如下错误

2016/12/07 11:09:29 [emerg] 3565#0: bind() to [::]:80 failed (98: Address already in use)

看起来是80端口被占用了,使用netstat -ant| grep 80,发现这个命令在wsl下无法使用。wsl和windows外部的端口是共用的,在windows下 netstat -ano| findstr “80”,发现没有进程占用80端口。
事实上仔细看下上面的地址[::]:80,这是一个ipv6地址。因此解决的最简单办法是将/etc/nginx/sites-available/default中的ipv6禁用。

default_server ipv6only=on;

再次启动nginx,log中报错

 [alert] 3807#0: ioctl(FIOASYNC) failed while spawning "worker process" (22: Invalid argument)

关闭nginx的master进程模式即可,这部分内容参考(http://simohayha.iteye.com/blog/467940 )在/etc/nginx/nignx.conf中,

master_process off;#新增一句
worker_processes 4;#之前就有的

详细的讨论看这里(https://github.com/Microsoft/BashOnWindows/issues/68

3. 服务自启动

根据微软的说法,现在是没有办法实现bash服务自启动的。不过你可以使用bash -c命令执行一个脚本,在脚本中执行各种服务的启动。相当于对bash命令使用环境运行变量。
auto_init.sh脚本如下:

#!/bin/sh
PW=your-password 
echo 'Starting nginx'
echo $PW | sudo -S service nginx start > /dev/null && echo 'Nginx Started'
echo 'starting Mysql'
echo $PW | sudo -S service mysql start > /dev/null && echo 'Mysql Started'
echo $PW | sudo -S service php5-fpm start > /dev/null && echo 'Php5 fpm Started'
$SHELL

注意最后的$SHELL不要漏掉,不然运行完就关闭了。然后启动bash

bash  -c 'bash path/path/to/your/script.sh'

最新发布

CentOS专题

关于本站

5ibc.net旗下博客站精品博文小部分原创、大部分从互联网收集整理。尊重作者版权、传播精品博文,让更多编程爱好者知晓!

小提示

按 Ctrl+D 键,
把本文加入收藏夹