在shell脚本中运行tmux&开机自动执行脚本
起因
今天又收到了阿里云的邮件,说实例意外宕机然后又帮我重启了,让我去检查应用是否恢复。查看网站,倒是没有问题,然而code-server却登录不了。其实这也不出我所料,因为每次重启阿里云时,网站都会自动恢复,而code-server则要我去远程连接,重新敲命令来启动。
之前一直是这么干的,然而今天感觉太麻烦了,code-server能否也开机自启呢?经过一番周折,终于实现了。
第一步:用shell脚本启动code-server
这一部分我很久之前就完成了,不过还是说一下。我将code-server的可执行文件放在家目录下,每次只要运行它就行了,不过还要指定访问端口,并且指定证书以支持https访问。编写的code-server.sh
脚本如下,这倒没什么难的,不过是把手敲的命令放到文件里罢了。
1 |
|
第二步:用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 |
|
第三步:开机自动运行shell脚本
最后,我们只要能让上面的脚本开机自动运行就好了,我找到了这篇文章——linux设置开机启动脚本的3种方法,使用了里面的第一种方法,就是先用chmod +x
命令,将上面的脚本变成可执行文件,然后将它加入到rc.local
中。
至此,code-server就可以开机自启了。
结语
不得不说,开机自动启动确实爽,这下意外宕机也可以无感知恢复了,再也不用去远程连接阿里云敲命令启动了,能省一事省一事,不愧是懒惰使人进步啊😋。