写一个脚本,推送到所有机器。然后批量执行这个脚本。
具体:
获取机器ip,然后对应的ip执行对应的命令即可。
#!/bin/bash
lanip=`/sbin/ifconfig |awk -F'addr:| Bcast' '/Bcast/{print $2}' | head -1` #获取本机ip
case $lanip in
"19216831")
;; #执行对应的脚本
"19216841")
;;
esac
就这样,自己写吧。
总结下使用ssh远程执行命令需要注意点:
一般我们会使用ssh ip "执行命令"这种格式来执行远程是shell命令,但是如果是简单的一些 *** 作还好,比如cd,rm,ls,mv等命令一般不会出问题
,但是如果你的脚本任务是,杀死多台机器上的hadoop或者elasticsearch进程,你会怎么做?
伦理片 >
直接使用:
ssh h1 "kill -9 `jps | grep Elastic | gawk '{print $1}' ` " 杀死es进程,你会发现,它竟然没有生效? 明明在本地执行
kill -9 `jps | grep Elastic | gawk '{print $1}' `
这个命令是可以生效的,为啥,放到远程执行命令中就失效了呢?
其实原因很简单,就是因为没有转义造成的,包括awk变量名引用都需要转义,否则,你会发现,虽然能执行,但结果依旧是不准确的,注意linux中
单引号(所有命令均被当成普通字符处理)
双引号(可引用变量名)
反引号(可以执行linux脚本命令)的区别
看最终的正确的写法:
Java代码
ssh $host " es_pid=\`jps | grep Elasticsearch | gawk '{print \$1}'\` && kill \$es_pid "
历史服务器Hadoop自带了一个历史服务器,可以通过历史服务器在web端查看已经运行完的Mapreduce作业记录,比如用了多少个Map、用了多少个Reduce、作业提交时间、作业启动时间、作业完成时间等信息。默认情况下,Hadoop历史服务器是没有启动的,需要自行启动。启动后,在下图中点击history可跳转至历史服务器查看信息。
配置历史服务器
配置文件mapred-sitexml
配置文件在hadoop文件夹下的etc/hadoop中。
在该配置文件中添加如下代码:
其中mapreducejobhistoryaddress是启动历史服务器的端口,mapreducejobhistorywebappaddress是历史服务器web端的端口。
(可以自己设置端口号,建议不要太小)
<configuration>
<property>
<name>mapreducejobhistoryaddress</name>
<value>hadoop101:10020</value>
</property>
<property>
<name>mapreducejobhistorywebappaddress</name>
<value>hadoop101:19888</value>
</property>
</configuration>
登录后复制
分发配置文件
使用xsync命令向其他服务器分发配置文件:
xsync mapred-sitexml
登录后复制
启动历史服务器
首先要先启动hadoop集群:
start-allsh
登录后复制
再启动历史服务器:
mapred --daemon start historyserver
登录后复制
查看历史服务器
使用jps查看是否启动成功:
可以看到在5384端口,历史服务器已经运行。
在浏览器中打开hadoop:19888,即可看到历史服务器,如下图:
测试历史服务器
上传一个测试任务,其中/wcinput中包含有一个txt文件,可以自行创建任意内容,输出到名为/wcoutput1的文件夹中。(注意:输出的文件夹应不存在,否则会出错)
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-313jar wordcount /wcinput /wcoutput1
登录后复制
其中/wcinput文件夹在hadoop的目录下,并在该目录输入上述命令上传任务。(如下图)
等待任务运行完成后:
在web端查看运行情况:
点击右下角的History进入历史服务器查看详情:
至此历史服务器配置完成当你在命令行启动这个Web Server时,如果指定了一个PHP文件,则这个文件会作为一个“路由”脚本,意味着每次请求都会先执行这个脚本。如果这个脚本返回 FALSE ,那么直接返回请求的文件(例如请求静态文件不作任何处理)。否则会把输出返回到浏览器。
Example #1 启动Web服务器 服务于当前目录
$ php -S localhost:8000
Example #2 启动时指定根目录
$ php -S localhost:8000 -t foo/
Example #3 使用路由(Router)脚本
$ php -S localhost:8000 routerphp运行命令后面加 & 是后台运行,但启动它的父进程如果退出,这个 & 方式运行的依然会退出。
我的建议是用 screen 。这样会启动一个 shell “屏幕”可以随时断开后再另外一个地方重新恢复。
另外还一个方法是用 fg bg nohup 这一套命令也可以。不过具体怎么用我没研究,但控制不如 screen 方便。
其实你这个最好的办法还是写到服务器的开机运行命令行里面,方便很多啊。
另外……占用 ssh 有什么大问题么……
打开控制面板control
计算机管理compmgmtmsc
注销命令logoff
注册表regedit
系统加密(一旦加密就不能解开,保护windowsxp系统的双重密码)syskey
任务管理器taskmgr
自动更新wuaucplcpl
开机启动项msconfig
windows使用运行命令打开开机启动项步骤:
1、点击windows+R快捷键调出windows运行界面。
2、在windows运行界面输入框中输入开机启动项命令msconfig,然后点击确定。
3、进入系统配置界面之后,点击启动。
4、点击启动之后,就可以看到电脑那些软件是开机时就启动的了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)