IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

USE(Universal Script Executor):一个基于SSH的本机、远程机器统一视图的通用脚本执行器

许超前的博客 2012-01-02 20:57:40 累计浏览 3,046 次
本机暂存

USE是本人的第一个开源项目。立项的理由很简单:1)想证明通过组合“PHP+BASH+SSH”这三种常见的程序来产生一个集群内各机器统一视图的通用脚本执行器是切实可行的(当然,考虑到需要事先安装好PHP解释器和做好信任关系所造成的麻烦,后续有时间的话会使用C++直接调用libssl来实现);2)集中管理运维过程中用到的各个脚本;3)提供对现有程序无侵入式的管理方式。

这3点实际上是相关的。当然了,USE都做到了。实现很简单,目前代码行数在500行左右,本人利用元旦放假时间完成。以Apache License 2.0协议发布,代码可在https://github.com/xuchaoqian/use查看。

设计简图如下:
原图已失效
如图所示,所有的脚本程序都被集中管理起来了,不需要先分发到各远程机器再来执行了。现在只需在控制机上编写,存放到USE指定的目录(可配置),然后调用USE执行就可以了。这其中的脚本分发、脚本同步(因为过期了或者意外被删除了)、脚本日志记录,USE帮我们解决。透明性是USE在设计和实现时重点考虑的因素,对用户来说,脚本的编写、修改是在本机,脚本的执行也好像是在本机(因为所有的脚本执行日志都在本机可查,而且USE默认是把分发过去的脚本放到远程机器的/tmp目录里,不会侵入远程机器上的应用程序)。

命令帮助:

NAME
use - Universal Script Executor.
SYNOPSIS
use [host:]script[ arg1 arg2 ... argn]
DESCRIPTION
use connects and logs into the specified host and executes the runnable script with the args. If host is not given it’s connected to the localhost. If args is not given it’s assigned empty array.

测试用例:

# The content of echo.sh: echo "$@";
# The response: a"${b}'"\ c\"d 2012
use echo.sh $'a"${b}\'\"\\' 'c\"d' 2012

有兴趣的朋友可以直接用ssh执行一个远程命令来打印上述参数,看麻不麻烦?呵呵,用USE就不需要自己关心转义的事了。

另外,USE还提供了通过API编程的能力:

try {
    $executor = new executor();
    echo $executor->run($host, $script, $args);
} catch (exception $e) {
    echo $e->format_stack_trace();
    exit(-1);
}


详细的,就不再赘述了,感兴趣的朋友可以自己翻代码看。

同分类推荐文章

  1. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)
  2. WARNING: detected duplicate paths to the same disk导致crs无法正常启动故障解决 (2026-05-24 22:24:49)
  3. Terraform 极简入门:从 AWS-CLI 到基础设施即代码(IaC) (2026-05-20 08:00:00)

查看更多 DevOps 文章 →

建议继续学习

  1. 使用gettext来支持PHP的多语言 (累计阅读 39,197)
  2. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,097)
  3. Bash的模式和配置文件加载 (累计阅读 24,352)
  4. Paypal接口详细代码(PHP版,非API接口) (累计阅读 19,352)
  5. 我的PHP,Python和Ruby之路 (累计阅读 13,075)
  6. 高效Linux用户需要了解的命令行技能 (累计阅读 12,751)
  7. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,731)
  8. 15个最好的免费开源电子商务平台 (累计阅读 12,470)
  9. Redis消息队列的若干实现方式 (累计阅读 12,011)
  10. 到底什么是MVC? (累计阅读 11,722)