Articles of shell scripting

我如何使用openssl从HTTP GET请求获取结果?

我需要使用openssl在shell脚本中执行一些HTTP GET请求。 下面显示了我正在使用的线路。 这是parsing以下格式的XML响应的内容。 <Result>success</Result> <Result>failure</Result> echo -e "GET /test HTTP/1.1\r\nHost:$(hostname)\r\n\r\n" | openssl 2>&1 s_client -quiet -connect server-url:443 | grep -o -P –color '(?<=Result\>).*(?=\</Result)' 这工作,并相应地返回string“成功”或“失败”。 我面临的问题是openssl命令在执行GET请求后不会终止,而是坐在那里等待更多的input。 我相信这是由于隐含的-ign_eof防止由-quiet选项引起的自动终止。 我已经尝试使用-no_ign_eof选项,但是这会导致openssl命令在GET请求收到响应之前终止,所以我不能得到响应的内容,如果我使用它。 我怎样才能修改这个命令,所以我可以传递GET请求通过stdin(要求,因为我想把它放在一个循环),但有openssl命令后,每个请求终止?

在生产中自动优雅地重新装上炮弹

我有一个自动部署工作stream程,将代码推送到我的生产服务器,并触发数据库迁移,静态文件更新等。问题是,gunicorn不会自动重新加载代码更改没有开发选项 – –reload ,他们build议不使用生产。 相反,指令是发送一个HUP信号给masterpid 。 问题是,我不知道如何在自动脚本中检索masterpid ,尽pipe手动操作很简单。 如何在bash脚本中检索gunicorn systemd进程的materpid值?

在回声中抑制*的扩展

我正在处理一个脚本,每天dynamic地执行一些查询。 这些查询来自数据库中的一个表。 以下是查询表的示例输出: +—————+——————————-+———+ | query_name | query | userid | +—————+——————————-+———+ | All_User | select * from users LIMIT 10; | jmatthe | +—————+——————————-+———+ 现在,我必须执行查询select * from users LIMIT 10; dynamic。 我正在读取输出的每一行,并从输出存储查询。 query_name=$(echo $query | cut -d\| -f1) query_sql=$(echo $query | cut -d\| -f2) query_user=$(echo $query | cut -d\| -f3) 现在问题出现在这里。 因为我的行包含一个*字符,所以echo $query将扩展*以将其replace为当前目录中的文件。 所以基本上,我的query_sql存储这样的东西。 […]

脚本不能在域pipe理员下运行

运行2003R2的服务器。 我有一个脚本,基本上设置一个variables,然后用它来命名备份文件。 我在这里给出了确切的脚本: echo > "%temp%\tmp.vbs" wscript.echo 10000 * month(now()) ^ + 100 * day(now()) + year(now())-2000 for /F %%a in ('cscript //nologo "%temp%\tmp.vbs"') do ( set MyDate = %%a) echo %MyDate% >test.txt 此脚本从计划任务运行。 当我在我的login下运行任务,并运行它作为我自己,它运行完美。 但是,如果我以域pipe理员或其他“备份”用户身份运行任务,则上述给定命令不起作用。 我已经把最后一个echo命令作为testing目的。 当它工作,它给了我MyDate的实际价值。 如果不是这样,它就忽略了价值,就好像它不在那里一样。 我得到了“Echo is off”命令,就好像命令只是Echo一样… 只是不明白为什么它运行在一些用户下,而不是一些用户下。 而洞察力和启发会有所帮助。 谢谢。

初始化脚本和绿色

我试图在EC2实例上安装nginx的fast-cgi。 我遵循这里解释的步骤,但是这是为了Debian,并没有开箱即用的基于红帽子的系统。 我修改了一下脚本,看起来像 – #!/bin/bash ### BEGIN INIT INFO # Provides: php-fcgi # Required-Start: $nginx # Required-Stop: $nginx # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts php over fcgi # Description: starts php over fcgi ### END INIT INFO . /etc/rc.d/init.d/functions (( EUID )) && echo .You need to […]

Linux FTP上传:“没有这样的文件或目录”,但文件存在

我想使用ftp从一台服务器上传备份档案到另一台服务器。 在我的备份cronjob中,我使用这个脚本来上传文件: MEDIAFILE=/var/somedir/somefile.encrypted if [ -r $MEDIAFILE ] # File seems to exist and is readable then ftp -n $FTPHOST <<END_SCRIPT quote USER $FTPUSER quote PASS $FTPPASS cd backups put $MEDIAFILE quit END_SCRIPT fi 这个脚本返回: /var/somedir/somefile.encrypted:没有这样的文件或目录 。 但该文件存在,执行该脚本的用户有权读取该文件。 什么是造成这个错误?

Bash脚本 – Munin插件不工作

我写了一个munin-plugin来计算lighttpd的http-statuscodes。 剧本: #!/bin/bash ###################################### # Munin-Script: Lighttpd-Statuscodes # ###################################### ##Config # path to lighttpd access.log LIGHTTPD_ACCESS_LOG_PATH="/var/log/lighttpd/access.log" # rows to parse in logfile (higher value incrase time to run plugin. if value to low you may get bad counting) LOG_ROWS="200000" # #munin case $1 in autoconf) # check config AVAILABLE=`ls $LIGHTTPD_ACCESS_LOG_PATH` if [ "$AVAILABLE" = "$LIGHTTPD_ACCESS_LOG_PATH" […]

期望脚本+期望错过发送string+延迟问题

我写了active.ksh脚本(基于期望),以便自动login到一些Solaris机器并执行hostname命令(login到虚拟IP为了validation哪个主机名是活动的机器 – 我有两个群集solaris机器) 问题在于expect ; 期望发送密码string(pass123)而忽略密码问题,而仍然等待密码。 所以实际上密码问题后input密码(pass123)。 在大多数情况下,期望的脚本工作正常,但有时却错过了密码。 问题的例子 ./active.ksh spawn ssh 10.10.18.61 sh: /usr/local/bin/stty: not found This computer system, including all related equipment, networks and network devices (specifically including Internet access),is provided only for authorized uss Password: * my remark – pass123 string was missed the Password Question pass123 Password: 剧本 #!/bin/ksh VIP_ADDRESS=10.10.18.61 expect_for_verify_which_active_machine=`cat […]

无声和脚本安装的CPAN和Perl模块?

我需要在Scientific Linux(RHEL)安装脚本中自动安装CPAN和一些Perl模块。 不幸的是,我所希望的特定模块(至less其中之一)不能作为RPM被发现,就我所见。 所以我需要安装CPAN,自动configuration(或使用configuration文件),然后自动安装想要的模块(包括依赖项)。 这似乎不是一个非常不寻常的要求,但我还没有看到任何真正的好文件。 问题是,每当CPAN第一次启动交互式configuration运行。 这可以跳过吗? 我该如何直接从命令行启动模块安装?

docker的shell脚本ps -a | grepfind运行某些容器的数目

我想编写一个脚本,由我的开发构build服务器执行,在构build和运行新容器之前将删除所有“类似的”泊坞窗容器。 下面是我需要的bash脚本的伪代码 var name = $1 var number_of_results = # of containers returned from $(docker ps -a | grep "$name") if(number_of_result > 0) docker rm -f $(docker ps -a | grep "$name")