Articles of 庆典

如果子脚本在后台运行,则“run-one”命令不起作用

我使用run-one命令运行test.sh ,并确保一次只运行一个实例。 test.sh有时使用以下命令启动另一个名为execute.sh长时间运行的脚本: setsid execute.sh >/dev/null 2>&1 < /dev/null & (具有正确的path),并且test.sh退出。 问题在于,出于某种原因,run-one继续认为test.sh仍在运行,只是因为execute.sh仍在运行。 我如何防止?

错误使用numfmt

我有一个使用numfmtdocker的Munin插件的问题: node3:/etc/munin/plugin-conf.d# munin-run docker_storage numfmt: invalid suffix in input: '524.3k' poolblocksize.value basedevsize.value 11531987190 dataspaceused.value 222049809204 dataspacetotal.value 285507951002 dataspaceavail.value 63425929544 metadataspaceused.value 71198311 metadataspacetotal.value 281437799 metadataspaceavail.value 210239488 thinpoolminfreespace.value 28550795101 得到这个: docker info | while read line; do KEY=$( echo "$line"|cut -f1 -d:|tr ' ' '_' ) VAL=$( echo "$line"|cut -f2 -d:|cut -f2 -d' ' ) UNT=$( echo […]

在bash中为perl脚本监视脚本失败

我已经被ASSP的作者发送了一个简单的监视脚本,但我不确定如何修复导致错误的PROC =行。 #!/bin/bash # ASSP watchdog process. # # Start in the correct directory. BASE=/usr/share/assp/ cd $BASE # Check for a running ASSP process. PROC=`ps -axvO ucomm | grep Schedule::Cron | grep perl | awk '{print $1}'` FILES=`lsof -p "${PROC}" | grep /usr/share/assp | grep perl` # If ASSP is not running, start it. if […]

SDERR和STDOUT用于logging的BASH脚本中的文件描述符

我正在尝试将基本日志logging添加到脚本,每天将由cron作业运行。 基本上它沿着这些线路: LOGFILE=mylog.txt exec 3<>$LOGFILE 2>&1 commands … exec 3>&- 基本上所有我需要知道的是如何正确写入第三行,以便STDERR和STDOUT都被写入FD 3,这是日志文件。 我一直在摸索它,可悲的是TLDP的解释并不是最好的 – 大多数关于redirect和文件描述符的教程都没有涉及到这种深度。 任何帮助真的不胜感激。

将string传递给需要文件的命令

我有一个命令行程序,期望被传递一个configuration文件,例如 sphinx –config /some/config_file 我从一个ruby程序中调用这个命令,在写入到磁盘之前,我现在dynamic地生成了configuration文件,这看起来很浪费,因为这个文件只是每次使用一次而后又被直接删除。 我想知道是否有办法避免将文件写入磁盘,只是传递一些程序会认为是文件,但是还没有写入磁盘的东西?

Bash – 获取当前用户CPU利用率

我试图做我觉得很简单的任务,但我碰到了一个奇怪的问题,不幸的是,我有限的Bash经验(我通常使用Ruby的脚本)我需要一些帮助。 我所要做的就是编写一个简单的检查CPU利用率的脚本,如果利用率超过一个特定的数量,它会做一些事情。 所以我从头开始捕获CPU利用率,如下所示: CPU_SUMMARY=(`top -b -n 1 | grep ^Cpu`) 不幸的是,当我检查这个结果的时候,我从一开始就得到了一些额外的信息: $ echo $CPU_SUMMARY 24ms, 0.8y, 0.0ubuntui, 97.77d, 0.2Tue 9a, 0.0137i, 0.0i, 0.2tCpu(s): 1.1%us, 0.8%sy, 0.0%ni, 97.7%id, 0.2%wa, 0.0%hi, 0.0%si, 0.2%st “24ms,0.8y … 0.2t”从哪里来? 如果我运行相同的命令top -b- n 1 | grep ^Cpu top -b- n 1 | grep ^Cpu没有试图分配给variables,我得到: Cpu(s): 1.1%us, 0.8%sy, 0.0%ni, 97.7%id, 0.2%wa, 0.0%hi, […]

Bash,用一个参数运行一个命令,继续原来的命令

对不起,令人困惑的标题,但这是即时通讯要做的事情: TORQUEBOX_START="$TORQUEBOX_HOME/jboss/bin/standalone.sh" TORQUEBOX_START_ARGS="–server-config=standalone-ha.xml" start-stop-daemon –start –quiet –chuid $DAEMONUSER \ –exec "${TORQUEBOX_START}" — ${TORQUEBOX_START_ARGS} –pidfile $PIDFILE –make-pidfile — -c $TORQUEBOX_SERVER >> $LOGFILE 2>&1 & 我需要运行带有参数的TORQUEBOX_START –exec参数。 我尝试使用 – 将parameter passing给它。 但从那里我真的不知道我怎么能回到原来的命令传递参数。 例如,需要将–pidfile传递给start-stop-daemon 。 有没有办法做到这一点或你可以build议的方式?

如何通过使用bash脚本将行添加到特定节中的文件?

我正在写一个bash脚本,最终将自动化Apache的用户configuration。 我有这部分的Apacheconfiguration( httpd.conf ): NameVirtualHost XXXX:80 <VirtualHost *:80> ServerName qa-market.local DocumentRoot /var/www/networks Alias /alex /var/www/networks/net-32 Alias /daniel /var/www/networks/net-24 </VirtualHost> 我希望脚本在<VirtualHost></VirtualHost>部分和最后一个Alias行之后添加另一个Alias指令。 这是我希望脚本添加的指令: Alias /\$user /var/www/networks/\$userdir 如何做呢? 谢谢!

将循环转换为while循环比较数组

有时候(例如8小时轮换4次或5次),我必须检查从共享服务器提供的站点是否正在加载。 我目前有一个脚本来做到这一点,但是我使用嵌套for循环遍历两个数组,以确保我只是检查实际上从服务器提供服务的网站。 我一直在阅读和发现,这种方法可能会有问题,但不能弄清楚如何把它们变成while循环或其他方法。 我设置了两个数组,其中一个是所有的站点,以及挖出来的IP地址,以及来自curl的状态码(203.0.113.231 – foobar.com – Status_code = 200)。 另一个arrays是服务器上的所有IP。 然后将第一个数组与第二个数组进行比较,仅打印第一个数组中第二个数组中的元素。 #!/bin/bash _ORGIFS=$IFS IFS=$'\n' _sitecrls=($( for _x in $(grep 'ServerName' /etc/httpd/conf.d/vhost_* |grep -v '000_defaults' |uniq |awk '{print $NF}'); do printf "%s %s %s %s %s\n" "$(dig +short $_x |head -n1) – $_x – Status_code=$(curl -so /dev/null -w %{http_code} $_x)" | sed '/^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/!d'; done )) […]

计算接收Postfix邮件服务器成功交付与失败

我试图计算一个大概的百分比,我的邮件服务器处理多less邮件服务器进程成功交付多less下降,因为邮件来自错误configuration的邮件服务器,垃圾邮件等.. 我首先在/ var / log /目录中运行以下两个命令(以捕获maillog中的条目以及已经旋出的较旧的maillog): grep "dsn=2.0.0, status=sent (delivered to maildir)" * | wc -l 7814 grep "NOQUEUE: reject: RCPT" * | wc -l 13338 但后来我认为这些条目可能会重复复制(尤其是NOQUEUE)。 所以我运行了下面稍微修改过的命令,看看可能有多less差异。 grep "dsn=2.0.0, status=sent (250 2.0.0 from MTA(" * | wc -l 8839 看着我的maillog条目,我得到了多个NOQUEUE条目的投递尝试。 但我认为这是因为发送邮件服务器有时会尝试多次交付。 例如: Aug 10 10:48:24 mail postfix/smtpd[7159]: NOQUEUE: reject: RCPT from unknown[112.198.103.178]: 450 4.7.1 […]