我使用Zabbix的zabbix_sender.sh脚本将exception堆栈跟踪推送到远程Zabbix监视服务器。 zabbix_sender.sh需要一个键和它发送的任何数据的值。 它可以从stdin读取数据,但是这会覆盖指定的任何关键variables。 因为我的stdin数据不像Zabbix所期望的那样格式化,所以我需要传入“值”作为参数。 希望这提供了一些上下文。 我想要完成的是将grep的多行结果捕获到一个variables中,保留换行符,以便我可以用该variables作为参数调用zabbix_sender.sh脚本。 我到目前为止所尝试的是这样的: tail -Fn0 /var/log/uwsgi.log | grep "Exception:" -A 100 | (read tback; /usr/local/zabbix/bin/zabbix_sender -z myzserver.com -s MyHostName -k uwsgi_traceback -o $tback) 尽我所知,从来没有调用zabbix_sender.sh 。 为了testing,我试过使用这个命令,这似乎也不工作: tail -Fn0 /var/log/uwsgi.log | grep "Exception:" -A 100 | (read errorlines; echo "$errorlines" > /tmp/errorlines.txt) /tmp/errorlines.txt文件永远不会被创build。 如何将grep的输出行捕获到一个variables中,以便我可以用该variables调用另一个脚本作为参数?
我目前有一个专用的Ubuntu备份服务器,每天都会从挂起(使用rtcwake)唤醒自己。 5分钟后,一个cron BASH工作开始,使用rsync从各个networking位置提取文件。 如果这个BASH脚本完成了,它所做的最后一件事就是让服务器重新进入hibernate状态,直到第二天(备份作业开始运行之前的5分钟 – 您可以看到图片!)。 还有一个额外的cron作业,在10:45 pm运行,以“清除”任何正在运行的脚本/ rsync进程,然后暂停机器,直到第二天。 我的问题/查询是:机器是在一个慢速链接(802.11n无线),并必须同步一些非常大的媒体文件。 我正在使用与此类似的rsync命令: rsync -aPvz -e ssh –itemize-changes –modify-window=60 –exclude 'thumbs.db' /source/ /destination/ 而在rsync无法在服务器唤醒的时间内完成的情况下,我假定(因为-P)它会尝试从中断的地方继续。 实际上似乎发生的是,我最终得到目录中同一文件的多个部分副本,但副本从未完成。 例如: .BigFile.mkv.EJtNSS (4.1GB) .BigFile.mkv.KSUStW (3.7GB) .BigFile.mkv.LSewSA (4.3GB) 有没有人遇到过类似的情况? 如果有一块软件可以做类似的工作(包括处理睡眠/唤醒),我很乐意将它改变。 我是BASH脚本的新手,但尝试任何build议。 干杯,洛兹
出于某种原因,我的cron作业脚本没有完全退出,他们正在备份我的服务器。 目前我的一个用户正在运行几百个进程。 我可以使用下面的命令来终止该用户的所有进程,但是我怎么能简化这个只杀死crons? pgrep -U username | while read id ; do kill -6 $id ; done 按原样运行上述命令会很危险,对吗? 不会杀死MySQL和其他重要的东西吗?
我需要在我的postfix / dovecot服务器上实现解决scheme,每次消息到达时都会执行bash脚本。 为此,我在master.cfconfiguration中做了以下的事情 myhook unix – nn – – pipe flags=F user=customUser argv=/path/to/script.sh ${sender} ${recipient} smtp inet n – – – – smtpd -o content_filter=myhook:dummy 只要您不想通过dovecot发送邮件到邮箱,就可以正常工作。 问题是,不知怎的,我需要把所有东西都扔回去。 或者也许有一个更好的方法,这是我不知道的。 在这种情况下,我感谢每一个想法或提示。
mkdir test_dir test_dir1 test_dir2 test_dir3 touch file1 file2 file3 cp -v file* test_dir*/ 这只复制到test_dir3,而不是在test_dir,test_dir1,test_dir2。 为什么? 对于这一点,它只复制到最新的目录,如test_dir4,而不是任何其他direcotry(这是省略它们)。
我写了一个小脚本来确定每小时的平均IOP,在此之后,我手动将其转换为graphics和电子表格,供pipe理人员讨论即将进行的扩展项目的SAN升级。 运行的系统当前是运行RHEL 6的物理机器。 我有脚本安排在根的crontab如下所示: 0 * * * * /bin/bash /IOPsLogs/IOPs.sh >> /var/log/cronjobIOPs.log 2>&1 我的脚本IOPs.sh看起来像: #!/bin/bash date >> /var/log/cronjobIOPs.log date +"%Y-%m-%d–%H:00" >> /IOPsLogs/Daily$(date +%Y-%m-%d).log timeout -sHUP 60m iostat -x 1 | grep sda -B 1 >> /IOPsLogs/IOPs_$(date +%Y-%m-%d–%H:00).log grep "sda" /IOPsLogs/IOPs_$(date +%Y-%m-%d–%H:00 -d "1 hour ago").log | awk '{sum+=$4} END { print "Average IOPs read'/'sec= […]
我正在托pipe一些游戏服务器,每个服务器实例运行在标准输出,但他们没有时间戳,只是将事件logging到新行,例如: 播放器连接 播放器b连接 游戏开始 玩家X碎片玩家Y 游戏结束 等等 这个问题是,当服务器崩溃,我不知道什么时候发生。 有没有办法pipe道服务器标准输出通过一些命令,并得到相同的输出回到文件,或标准输出再次,但与前面的时间戳?
这里是一个bash脚本,它计算Linux机器上可用整数的80%的整数: server_ram_mb=$(awk '/MemTotal/ {printf( "%.2f\n", $2 / 1024)}' /proc/meminfo) echo "($server_ram_mb * 0.8)/1" | bc > /tmp/output eighty_percent_ram_mb=$(cat /tmp/output) 不过,有几件事我不喜欢: 它写入临时文件(我试图将其设置为一个variables,并不能通过语法问题) 它需要bc ,这在所有Linux发行版中都没有默认安装 如何重写/简化这个以避免这些问题?
需要一个灯我的脚本我正在做一个字数在一个variables得到一个0或更大的值,但它似乎脚本是在这个variables函数打破count_check = wc -l $TABLE_CHECKS | awk '{print $1}' wc -l $TABLE_CHECKS | awk '{print $1}'或if [$ count_check -eq 0],请参阅下面的代码。 #!/bin/bash -x set -e set -u # # Routine to check integrity of the restored backup # TABLE_CHECKS="$(mktemp -p .)" mysqlcheck -e -c –all-databases | grep -e error -e Error > $TABLE_CHECKS # if [ […]
我创build了一个shell脚本来完成3个简单的任务(压缩目录,重命名最终文件并删除源目录)。 脚本来源如下: #!/bin/bash if [[ $2 == *"/data/"* ]] then src= $2"/*"; dest= $1".zip"; # Just for test echo $src; # Commented for now #zip -r -j $dest $src #mv $dest $1 #rm -rf $2 else echo "Invalid arguments"; fi 当我用这些参数运行上面的脚本,我有错误: ./scriptzip.sh /data/file-new /data/file-old ./scriptzip.sh: line 4: /data/file-old/*: No such file or directory ./scriptzip.sh: line […]