我比较熟练bat、cmd脚本。刚接触使用shell时,总会习惯想用windows窗口界面来套用shell脚本。于是找到screen后台命令,它可以交互shell脚本,保持后台运行。但是在批处理batch、cmd环境下,使用start 可以调用弹出其它cmd脚本。在使用screen命令弹出新会话后,总是需要手动按键断开会话。此文章特意为解决这个问而提出解决办法和实验过程与结果,即使用脚本或命令自动调用后台命令或后台脚本,无需系统等待或人工干预。供大家学习和参考。欢迎讨论。顺带吐槽的是,这个需求或解决办法,几乎很少很难在搜索引擎结果中有效出现,所以我将它写下发布出来,供大家学习和自己使用。

参考文章

ssh远程执行脚本并在后台运行,通过screen解决 http://blog.uouo123.com/post/823.html

文章出现重要线索:screen -x -S $screen_name -p 0 -X stuff "$cmd"

shell嵌套expect执行screen命令 https://blog.csdn.net/xbw12138/article/details/79271575

文章展示出部分shell代码,加入了expect命令。同样出现重要线索:screen -x -S $screen_name -p 0 -X stuff "$cmd"

我个人认为没必要介入expect命令,多此一举

其它文章

文中出现线索:bash -c 'ping www.baidu.com';

后台调用命令

使用环境为:centos 6.1 已安装screen命令。一切后台调用过程,尽可能绕开手动断开会话过程,所以经掉查发现,使用 -dmS参数开启一个已断开的会话,可以绕过手动断开操作。一般在开启会话同时调用命令的写法是:screen ping www.baidu.com 但是套用在这里时没有结果:screen -dmS test ping www.baidu.com。使用screen -ls 检查时,不是没有创建出后台会话,就是进入会话是黑屏。即,没有命令被执行。所以经测试查找。配合使用bash -c参数,才可以在后台调用命令。完整命令如下:

screen -dmS test bash -c 'ping www.baidu.com';

其中 -dmS test 指 后台静默创建名称为 test 的会话,会话名比较重要。

bash -c 'ping www.baidu.com' 指 会话中 执行 ping www.baidu.com 命令

解释

一般的shell命令,执行完就结束了。脚本调用命令岂不是多此一举?

答:举例中的ping命令在没有参数情况下会一直ping下去。如果放在脚本中执行,应当是会一直执行下去,导致后续命令暂停。且一般的命令通过这个方式调用时,会话将伴随着命令的结束而自动销毁。已通过测试证实。

测试代码:

screen -dmS mv;
screen -dmS test bash -c 'service crond stop';
screen -ls;

执行完毕后,应当只出现1个名称为mv的会话

后台调用脚本

使用环境为:centos 6.1 已安装screen命令。将命令模式下的命令内容,无论怎样替换,始终无法执行。包括不限于这些举例./a.sh 、sh a.sh 所以经过参考文章发现重要线索:screen -x -S $screen_name -p 0 -X stuff "$cmd"  。原理应当是发送命令至指定会话中执行,所以前期创建会话时,应指定会话名。参数 -S 指定会话 参数 -X  发送命令 参数 stuff  ?疑似?是输出命令执行 参数 -p 指定屏幕。-x 连接断开会话。经测试发现,不需要使用 参数 -x  。参数-p 0 指定屏幕 0是必须参数。

测试代码:

screen -dmS test;
screen -dmS mv;
screen -S test -p -X stuff "sh /0/sh/init.sh";
screen -S test -p -X stuff $'\n';
screen -ls;

执行完毕后,应当只出现1个名称为mv的会话

screen -S test -p 0 -X stuff $'\n'; 是用于执行命令“回车”的操作。否则脚本不执行。

测试中,应该保证脚本会始终执行,不结束。所以sh /0/sh/init.sh 是一段暂停并有提示内容的脚本。还原会话后,能看到暂停提示。

暂停测试脚本内容参看:https://www.cnblogs.com/date/p/10497018.html

返工

次日重新使用后台调用脚本命令时,发现失败。后排查测试发现,在第一次成功时,客户端等待时间做了设置。后期未做设置以至于失败,失败原因位置。更正后方法如下,已经过本地测试

screen -dmS test;
screen -S test -p -X stuff $'stty -icanon min 0 time 30 \n\n';
screen -S test -p -X stuff $'\n';
screen -S test -p -X stuff $'bash /0/sh/init.sh\n';
screen -ls;

静默销毁后台命令

screen -ls;
screen -S test -p -X stuff "exit";
screen -S test -p -X stuff $'\n';
screen -ls

结束

以上内容为shell脚本通过screen命令,静默后台调用命令或脚本,仿Windows、CMD的start命令,伪窗口界面的方法与说明。欢迎大家学习阅读与讨论指正。

赞赏码

linux-shell-screen后台调用-后台运行脚本和命令-仿start命令-伪窗口界面的更多相关文章

  1. Linux shell - `dirname $0` 定位到运行脚本的相对位置

    例1. 在/home/admin/test/下新建test.sh内容如下: cd `` echo `pwd` 然后返回到/home/admin/执行 sh test/test.sh 运行结果: /ho ...

  2. Linux系统如何设置开机自动运行脚本?

    大家好,我是良许. 在工作中,我们经常有个需求,那就是在系统启动之后,自动启动某个脚本或服务.在 Windows 下,我们有很多方法可以设置开机启动,但在 Linux 系统下我们需要如何操作呢? Li ...

  3. linux shell实现守护进程 看门狗 脚本

    嵌入式初学者,第一次上传代码.昨天做了一个udhcpd与udhcpc的守护,目前只会用shell模仿编写,还有什么方法可以做守护呢? ? 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  4. Linux Shell编程(3)——运行shell脚本

    写完一个脚本,你能够运行它用命令:sh scriptname, [5] 另外也也可以用bash scriptname. 来执行(不推荐使用:sh <scriptname, 因为这样会禁止脚本从标 ...

  5. linux shell编程指南第二十章------向脚本传递参数

    前面已经讲到如何使用特定变量$ 1 . . $ 9向脚本传递参数.$ #用于统计传递参数的个数.可 以创建一个u s a g e语句,需要时可通知用户怎样以适当的调用参数调用脚本或函数. 简单地说,下 ...

  6. Linux Shell常用技巧(八) 系统运行状况

    十八.  和系统运行状况相关的Shell命令:    1.  Linux的实时监测命令(watch):    watch 是一个非常实用的命令,可以帮你实时监测一个命令的运行结果,省得一遍又一遍的手动 ...

  7. linux shell 之尝试编写 企业级 启动脚本

    企业Shell面试题10:开发企业级MySQL启动脚本 说明: MySQL启动命令为: 1 /bin/sh mysqld_safe --pid-file=$mysqld_pid_file_path 2 ...

  8. Linux shell:FTP(文件传输协议)上传下载命令

    SecureCRT通过ftp将nmon上传,建立一个目录,用命令上传文件.[命令见下面] 或通过UE.SSH上传/下载,使用sftp建立链接. [通过cmd进入ftp服务器]先假设有一FTP服务器,F ...

  9. Linux Shell 编程 教程 常用命令

    概述: Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户 ...

随机推荐

  1. 1001. [BJOI2006]狼抓兔子【最小割】

    Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...

  2. virtualbox+vagrant学习-3-Vagrant Share-1-简介

    Vagrant Share 通过 ngrok 内网穿透功能实现让全世界人可以访问虚拟机的服务 Vagrant Share允许你与世界上的任何人共享您的Vagrant环境,几乎支持你在任何网络环境中使用 ...

  3. CentOS7.2安装mysql

    1. 下载Mysql yum包 http://dev.mysql.com/downloads/repo/yum/ 复制链接使用wget下载 wget http://repo.mysql.com/mys ...

  4. mysql 二进制日志binary log操作简单命令

    show master status \G; #查看当前正在记录的二进制日志 show binary logs; #查看binary log 所有文件列表 show binlog events; #查 ...

  5. [LuoguP1462]通往奥格瑞玛的道路($SPFA+$二分)

    #\(\mathcal{\color{red}{Description}}\) \(Link\) 有一个图,求其在\(1-N\)的最短路小于一个给定值下,点权最大值的最小值. #\(\mathcal{ ...

  6. (转)Python学习笔记系列——Python是一种纯粹的语言

    此文出自知乎灵剑,原文传送门:https://zhuanlan.zhihu.com/p/23926957. 在摸索适合自己的语言学习方法,看到一篇好文章,转之,侵删. Python的语法范式相当多.知 ...

  7. The Ribbon Tab with id: "Ribbon.Read" has not been made available for this page or does not exist.

    The Ribbon Tab with id: "Ribbon.Read" has not been made available for this page or does no ...

  8. 【TOJ 2406】Power Strings(KMP找最多重复子串)

    描述 Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc& ...

  9. 使用SSH命令从一台Linux远程登陆到另一台Linux

    命令格式: ssh 用户名@IP 示例: ssh root@192.168.1.10 回车,然后根据提示输入登陆密码即可.

  10. 分子量 (Molar Mass,ACM/ICPC Seoul 2005,UVa1586)

    习题 3-3 分子量 (Molar Mass,ACM/ICPC Seoul 2005,UVa1586) 给出一种物质的分子式(不带括号),求分子量.本题中的分子式只包含4种原子,分别为C,H,O,N, ...