起因

今天又收到了阿里云的邮件,说实例意外宕机然后又帮我重启了,让我去检查应用是否恢复。查看网站,倒是没有问题,然而code-server却登录不了。其实这也不出我所料,因为每次重启阿里云时,网站都会自动恢复,而code-server则要我去远程连接,重新敲命令来启动。

之前一直是这么干的,然而今天感觉太麻烦了code-server能否也开机自启呢?经过一番周折,终于实现了。

第一步:用shell脚本启动code-server

这一部分我很久之前就完成了,不过还是说一下。我将code-server的可执行文件放在家目录下,每次只要运行它就行了,不过还要指定访问端口,并且指定证书以支持https访问。编写的code-server.sh脚本如下,这倒没什么难的,不过是把手敲的命令放到文件里罢了。

1
2
3
4
5
6
7
#! /bin/bash
#设置密码
export PASSWORD="******"
#定位至文件夹
cd ~/MyCode-server
#运行code-server,指定ssl证书以及端口
./code-server --cert **** --cert-key **** --host 0.0.0.0 --port ****

第二步:用shell启动tmux并在进程中运行命令

上一步的脚本倒是可以启动code-server,然而有个问题,这个code-server是运行在当前会话窗口中的,一旦我们关闭当前会话,code-server就被kill了。但如果要一直挂着阿里云的话,它还有什么意义呢?所以我们要通过tmux保持着code-server的不关闭,关于tmux的作用和使用方法,可以去看我的另一篇文章博客建站历程与复现之1.5,安装code-server。也就是先tmux new -s code-server开一个会话,然后再在这个会话里运行上面的脚本,这样只要不重启实例不kill会话,就会一直运行。

要解决的是,如何在shell里进行这个操作呢?最开始,我想直接放进shell文件里,然而失败了。在脚本执行完开启tmux窗口后,后续指令并不会按照原意灌入指定的窗格,而是弥散到原面板或tmux窗口中。为了解决这个问题,我参照了在脚本中运行Tmux,通过指定send -t使命令在对应进程中执行。据此编写open_code-server_in_tmux.sh如下。

1
2
3
4
5
#! /bin/bash
#tmux新建会话
tmux new -s "code-server" -d
#将指令发送到上面创建的会话中
tmux send -t "code-server" "bash ~/code-server.sh" Enter

第三步:开机自动运行shell脚本

最后,我们只要能让上面的脚本开机自动运行就好了,我找到了这篇文章——linux设置开机启动脚本的3种方法,使用了里面的第一种方法,就是先用chmod +x命令,将上面的脚本变成可执行文件,然后将它加入到rc.local中。

至此,code-server就可以开机自启了。

结语

不得不说,开机自动启动确实爽,这下意外宕机也可以无感知恢复了,再也不用去远程连接阿里云敲命令启动了,能省一事省一事,不愧是懒惰使人进步啊😋。