screen + rc.local 实现开机自启动多个窗口命令
开机自启动Screen并在后台运行程序
=========================================================================================================
#变量screen名称
screen_name1="frp"
#变量两条命令
cmd1="cd /root"
cmd2="./sipp2022.sh"
#创建screen但不进入
screen -dmS $screen_name1
#执行指令、输入回车分割。
screen -x -S $screen_name1 -p 0 -X stuff "$cmd1"
screen -x -S $screen_name1 -p 0 -X stuff '\n'
screen -x -S $screen_name1 -p 0 -X stuff "$cmd2"
screen -x -S $screen_name1 -p 0 -X stuff '\n'
#退出?
screen -x -S $screen_name1 -p 0 -X stuff "exit"
=========================================================================================================
touch fiile_autostart.sh # 建一个脚本文件
chmod 777 file_autostart.sh # 设置全部权限
vim file_autostart.sh
# 进行编辑
screen_name="file" # 要建立的screen名字
screen -dmS $screen_name
cmd="/root/filebrowser -p 20333 -a 0.0.0.0" # 要执行的命令,要指明路径,不指明时默认是在 / 目录下
screen -x -S $screen_name -p 0 -X stuff "$cmd" # 进行执行
screen -x -S $screen_name -p 0 -X stuff $'\n'
vim /etc/rc.d/rc.local
/root/file_autostart.sh # 增加一行
chmod +x /etc/rc.d/rc.local # 增加可执行权限
============================================================================================================
先写命令脚本:
(这是一个启动frp的脚本)
#变量screen名称
screen_name1="frp"
#变量两条命令
cmd1="cd /home/ubuntu/frp"
cmd2="./frpc -c frpc.ini"
#创建screen但不进入
screen -dmS $screen_name1
#执行指令、输入回车分割。
screen -x -S $screen_name1 -p 0 -X stuff "$cmd1"
screen -x -S $screen_name1 -p 0 -X stuff '\n'
screen -x -S $screen_name1 -p 0 -X stuff "$cmd2"
screen -x -S $screen_name1 -p 0 -X stuff '\n'
#退出?
screen -x -S $screen_name1 -p 0 -X stuff "exit"
========================================================================================
用cron设置开机自启动:
crontab -e
在打开的命令行终添加执行上面指令的命令(上面的命令文件要拥有执行权限)
bash /home/ubuntu/startfrp.sh
=========================================================================================
附上一些screen的操作提示:
[screen help]
screen -S <screen_name>
screen -r #reconnect screen (if you only have one) / show screen list
screen -ls #show screen list
[in screen]
ctrl - D #close screen
ctrl - A D #put screen in background
screen -ls
其中:32307为PID,tool为Name。
回到这个虚拟终端的命令即为:
screen -r 32307
# 或(在没有重名虚拟终端情况下)
screen -r tool
如果使用大些的-R,和-r类似,但是没有对应名称的PID或者Name时,会自动创建新的虚拟终端。
5. 清除终端
有时候,我们的进程已经“守护”完毕,不需要这个虚拟终端了,也就是需要释放资源,如何操作呢?
比较推荐的方法,是进入对应虚拟终端,然后输入:
# 退出终端
exit
之后,就会回到主终端。
==========================================================================================
https://zhuanlan.zhihu.com/p/405968623