使用 node.js 作为粘合剂混合 shell 脚本运维 Linux 服务器的可能性

2019-08-22 20:16:33 +08:00
 mhycy

曾经 python 是 shell 脚本之外运维服务器的首选语言
现在 node 有着更容易运维的运行时环境,更方便的包管理模式
是否意味着 node 能替代 python 作为运维脚本的选择之一呢?

2788 次点击
所在节点    问与答
25 条回复
panda1001
2019-08-22 20:21:51 +08:00
预装环境 shell>python>node
singerll
2019-08-22 20:22:47 +08:00
1、每个机器自带 python。2、不是写个脚本就叫自动化运维
mhycy
2019-08-22 20:40:09 +08:00
@panda1001
@singerll

特地装个 node 进去也没什么吧?
毕竟一般来说 python 3.x 也是需要手动装上去的
Python 还有 2.x、3.x 不兼容以及 2.x cli 输出时候的一些坑....
感觉这不成理由...

话说...我有提到自动化运维这事么?
ETiV
2019-08-22 20:56:01 +08:00
我能用 shell 的都用了 bash …

我用 nodejs 的时候遇到过一类问题,child_process.spawn 的 on-exit 和 stdout/stderr.on-data 的调用次序并不能保证

发生过子进程 exit 了,但是收到的 stdout 的内容不完整,导致没法解析子进程的输出内容

所以跟 nodejs 比,Python 的优势还是在的…(但是我并不会 Python )
airyland
2019-08-22 20:56:34 +08:00
我一直是这样用的,主要原因是 node 写起来更方便。
k9982874
2019-08-22 21:02:34 +08:00
我选择 python
singerll
2019-08-22 21:07:59 +08:00
@mhycy 你最后一句不是要替代 Python 吗。Python 就是干这个的。而且还有各种成熟的自动化软件也是依赖 python。。
mhycy
2019-08-22 21:43:22 +08:00
@singerll 说的是运维脚本...不是说自动化运维...别搞混
mhycy
2019-08-22 21:48:06 +08:00
@ETiV
这个问题不知道封装一层 Promise 能否规避, 感觉是个异步问题...
singerll
2019-08-22 21:56:43 +08:00
@mhycy 只是脚本的话 shell 就足够了,python 都很少用
cubecube
2019-08-22 22:09:19 +08:00
在公司内部,推动所有环境的服务器都部署一个特定的软件,需要很大的能量才能完成。开发视角和运维视角很不同的
Symo
2019-08-22 22:12:00 +08:00
主要还是生态 python 已经做得足够好了. shell 其实还是有些跨发行版不一致的情况.
jaskle
2019-08-22 22:14:07 +08:00
哪个简单用哪个
panda1001
2019-08-22 22:23:28 +08:00
@mhycy 并不是特指自动化运维,选 shell 和 python2.6 是有预装环境的优势,如果考虑配环境的话,我觉得 go 比 node 还更有优势
hcymk2
2019-08-22 22:26:06 +08:00
怎么不选 ruby 呢
coolair
2019-08-22 22:40:34 +08:00
装个 node 都觉得恶心
echo1937
2019-08-22 23:02:04 +08:00
@mhycy #3

脚本这块,现在有三种方向:
1. 传统型,基本上都是 shell > python > 其他,
2. 类似 ansible 之类的 playbook ;
3. docker/k8s,

Python 的版本问题,已经度过了最困难的时候,
Py2 现在已经接近 EOS,连最老旧的 RHEL/CentOS 在 8 版本都默认 Py3 了,

影响脚本语言流行度很重要的两个问题是:
1. 要比前辈足够优秀,比如 python 之于 bash,它增强了非常多,但是 node 之于 python 并没有那么大优势;
2. 流行度,在目前的服务器领域,真的很少有运维去学 node,因为真的不太用得到;
Osk
2019-08-22 23:02:31 +08:00
我来歪个楼,powershell

主要是管道传递的是对象真的太方便了,虽然我没仔细学过 powershell,但我自己靠 Google 写过几个脚本,真的太爽了。
shell 里面|传递文本,后面的命令得考虑下前一个命令的输出格式,python/js 里面怕是没有|,虽然可以获得返回的列表 /对象也挺好的但感觉没管道爽。

举个例子:
powershell 里面显示网卡的 ip,筛选条件是公司局域网地址

```ps1
>>> Get-NetIPAddress |? {$_.IPAddress -like "10.*"}| ft -Property IPAddress,InterfaceAlias

IPAddress InterfaceAlias
--------- --------------
10.1.1.28 Wi-Fi
```

看起来 powershell 的命令又臭又长, 但是,全程 tab 补全,我根本没记忆过参数和 cmdlet 的全称,最牛的是|后面的 cmdlet 居然能补全前一个命令的输出!!!!



希望 ms 加把力,以后 linux 上也能有完善的 powershell 也是不错的


不知道各位怎么看 powershell,我觉得也是挺优秀的,准备学习下
Osk
2019-08-22 23:03:43 +08:00
顺便 node_modules 真的是噩梦,太多小文件了,崩溃
tomczhen
2019-08-22 23:29:02 +08:00
可以,自己用的话没所谓,PHP,Ruby 也一样可以。

但是 Python 的优势很大,首先发行版自带解释器,其次 Python 标准库功能很多,最后一些需要编译的库大多数发行版都有二进制分发,通过包管理器即可安装。

如果使用环境默认就有 nodejs,人员也足够熟悉,那么用 nodejs 也合乎情理。但是从大环境看,要解决的问题很多,也不存在只能用 nodejs 才能解决痛点。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/594316

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX