7.子系统ubuntu18.04开机启动研究

正确方法一:

创建init.wsl文件

touch /etc/init.wsl
或者直接编辑
sudo vim /etc/init.wsl
内容为

! /bin/sh

/etc/init.d/ssh $1
/etc/init.d/mysql $1
/etc/init.d/nginx $1
/etc/init.d/php-fpm $1
exit 0

也或者可以这样

sudo service ssh start
sudo service mysql start
sudo service nginx start
sudo service php-fpm start

添加执行权限

sudo chmod +x /etc/init.wsl
编辑sudoers,避免输入密码
sudo visudo
或者
sudo vim /etc/sudoers
编辑添加一行
%sudo ALL=NOPASSWD: /etc/init.wsl
或者
yourusername * = (root) NOPASSWD: /etc/init.wsl

#yourusername 为 linux账户名称 似乎麻烦

I插入ESC退出编辑,保存:wq!

win+r shell:startup <- 进入启动目录
创建一个startservice.vbs脚本内容为:

Set ws = WScript.CreateObject("WScript.Shell")
ws.run "ubuntu1804 run sudo /etc/init.wsl start", vbhide
或者
ws.run "C:\Windows\System32\bash.exe -c 'sudo /etc/init.wsl'",0

正确方法二:
特点:开启控制台一次生效
sudo vim ~/.profile
添加以下内容
sudo service ssh start
sudo service mysql start
sudo service nginx start
sudo service php-fpm start
然后编辑
sudo vim /etc/sudoers
在/etc/sudoers最后加入
%sudo ALL=NOPASSWD: ALL
或者
you_name ALL=(ALL) NOPASSWD: ALL
因为放大了you_name权限,所以建议useradd一个新用户用于SSH连接

题外讨论:
systemctl命令是系统服务管理器指令,它实际上将 service 和 chkconfig 这两个命令
chkconfig rc* 不可启动
chkconfig enable apache2
update-rc.d 不可启动
systemctl 不可启动
rc.local 只有红帽才用,ubuntu使用/etc/init.d代替
/etc/下有一个event.d用来存放识别的各种event
主要有三种:
rc-default,
rcX(X = 0,1,2,3,4,5,6,S),
ttyX(X = 0,1,2,3,4,5,6,S)
其中rc-default就类似inittab文件,
S表示在启动时运行,数字则表示执行的先后顺序
Runlevel 0 : 关闭系统
Runlevel 1 : 维护模式
Runlevel 3 : 多用户,无图形系统
Runlevel 4 : 多用户,无图形系统
Runlevel 5 : 多用户,图形化系统
Runlevel 6 : 关闭并重启机器

最新开机启机也可以这样,初始化执行的队列 测试无效
update-rc.d xxx defaults NN命令(NN为启动顺序)
如果脚本需要用到网络,则NN需设置一个比较大的数字,如99。
sudo update-rc.d -f ssh defaults
sudo update-rc.d -f mysql defaults
sudo update-rc.d -f nginx defaults
sudo update-rc.d -f php-fpm defaults
想要取消服务开机启动
cd /etc/init.d
sudo update-rc.d ssh remove

点赞