前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ubuntu下利用expect实现screen多窗口开机运行

ubuntu下利用expect实现screen多窗口开机运行

作者头像
小沨
修改2020-08-06 17:56:49
1.5K0
修改2020-08-06 17:56:49
举报
文章被收录于专栏:networknetwork

ubuntu下利用expect实现screen多窗口开机运行

1. expect的安装与使用

1.1. expect的安装与使用
是什么

expect 是用来进行自动化控制和测试的工具。主要是和交互式软件telnet ftp ssh 等进行自动化的交互。

如何安装
1.2. 检测是否安装
代码语言:javascript
复制
ls /usr/bin |grep expect

Bash

如果不存在,则进行安装

1.3.安装
代码语言:javascript
复制
apt-get install expect

Bash

代码语言:javascript
复制
ls /usr/bin |grep expect
autoexpect
expect
expect_autoexpect
expect_autopasswd
expect_cryptdir
expect_decryptdir
expect_dislocate
expect_ftp-rfc
expect_kibitz
expect_lpunlock
expect_mkpasswd
expect_multixterm
expect_passmass
expect_rftp
expect_rlogin-cwd
expect_timed-read
expect_timed-run
expect_tknewsbiff
expect_tkpasswd
expect_unbuffer
expect_weather
expect_xkibitz
expect_xpstat

Bash

wiki对于expect说明https://zh.wikipedia.org/wiki/Expect

2. 安装screen

代码语言:javascript
复制
apt-get install screen

screen用法这里不做过多的介绍,请大家google搜索

3. 利用expect实现screen多窗口运行

3.1. 建立start.sh开机运行
代码语言:javascript
复制
#!/usr/bin/env bash
screen_name1=$"baidu"
screen -dmS $screen_name1
cmd1=$"ping www.baidu.com";
screen -x -S $screen_name1 -p 0 -X stuff "$cmd1" #创建screen
screen -x -S $screen_name1 -p 0 -X stuff $'\n' #回车
# 嵌套expect
# send "\01" 模拟输入 ctrl-a 
# send "d" 模拟输入d  ctrl-a+d是挂起screen
/usr/bin/expect <<EOF
send "\01"
send "d"
expect eof
EOF

screen_name2=$"google"
screen -dmS $screen_name2
cmd2=$"ping www.baidu.com";
screen -x -S $screen_name2 -p 0 -X stuff "$cmd2"
screen -x -S $screen_name2 -p 0 -X stuff $'\n'
/usr/bin/expect <<EOF
send "\01"
send "d"
expect eof
EOF

Bash

测试脚本

代码语言:javascript
复制
sh start.sh

Bash

查看screen窗口

代码语言:javascript
复制
screen -ls

Bash

代码语言:javascript
复制
#输出文字,字样就成功启动
There is a screen on:
    168.baidu   (06/08/19 07:14:04) (Detached)
    158.google  (06/08/19 07:14:04) (Detached)
1 Socket in /run/screen/S-root.

Bash

3.2 创建stop.sh文件
代码语言:javascript
复制
#!/usr/bin/env bash
screen_name1=$"baidu"
screen -X -S $screen_name1 quit #退出screen

screen_name2=$"google"
screen -X -S $screen_name2 quit

Bash

3.3 crontab定时执行这两个脚本
代码语言:javascript
复制
crontab  -e

0 10 * * * /root/start.sh #每天早晨10点
30 23 * * * /root/stop.sh #每天晚上23.30

Bash

3.4 开机运行

设置开机启用,仅限ubuntu18版本

代码语言:javascript
复制
#首先检查rc-local是不是启动了,如果启动最后完全还要restart,这里的坑,sandy踩了半个小时
systemctl status rc-local.service

vim /lib/systemd/system/rc-local.service
#最下加入
[Install]
WantedBy=multi-user.target
Alias=rc-local.service

vim /etc/rc.local
#加入下面代码
#!/bin/bash
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
bash /root/start.sh
exit 0

Bash

代码语言:javascript
复制
#给予权限
chmod +x /etc/rc.local
#开启服务
systemctl enable rc-local
#启动服务并检查状态
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service

#重新启动服务器
reboot

#检测服务器是不是已经启动
sudo systemctl status rc-local.service
#输出文字,字样就成功启动
Active: active (running) since Fri 2019-06-07 03:25:59 UTC; 19s ago
screen -ls
#输出文字,字样就成功启动
There is a screen on:
    168.baidu   (06/08/19 07:14:04) (Detached)
    158.google  (06/08/19 07:14:04) (Detached)
1 Socket in /run/screen/S-root.

Bash

寥寥君折腾实践经验所得,不接受其他转发,本站已经取得独立授权!:-)

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ubuntu下利用expect实现screen多窗口开机运行
    • 1. expect的安装与使用
      • 1.1. expect的安装与使用
      • 是什么
      • 如何安装
      • 1.2. 检测是否安装
      • 1.3.安装
    • 2. 安装screen
      • 3. 利用expect实现screen多窗口运行
        • 3.1. 建立start.sh开机运行
        • 3.2 创建stop.sh文件
        • 3.3 crontab定时执行这两个脚本
        • 3.4 开机运行
    相关产品与服务
    云服务器
    云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档