我有一个运行磁盘快照的命令(在EC2上,冻结一个XFS磁盘并运行一个EBS快照命令),它被设置为定期运行一个cron作业。 理想情况下,如果磁盘在计划运行的那一刻被大量使用,我希望能够使命令延迟一段时间。 恐怕使用nice / ionice可能没有适当的效果,因为我希望脚本在运行时(即等待好时间,然后快速完成)以高优先级运行。 谢谢。 更新 : 这是我最终去的。 它会检查/ proc / diskstats并在当前IO活动达到0时运行我的作业,或者我们超时。 当我看看我们的服务器在生产中实际获得什么样的IO活动时,我可能不得不调整这个: #!/bin/bash DEVICE=sdf # we want to make a snapshot when IO in progresses reaches this: LOW_THRESHOLD=0 TIMER=0 MAX_SEC_DELAY=120 # Get the number of IO operations in progress: ioInProgress(){ grep $DEVICE /proc/diskstats | awk '{print $12}' } # Wait for a good […]
基本上,我试图设置一个shell脚本,让我自动configuration我的新服务器上的一些参数 特别是,我想在php.ini中设置 error_log = /var/log/php_errors.log error_reporting = E_ALL&〜E_NOTICE&〜E_STRICT&〜E_DEPRECATED 在我的bash脚本中,我有这样的: ERROR_REPORTING="error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED" ERROR_LOG="/var/log/php_errors.log" #CREATE LOG FILE sed -i 's/error_reporting = .*/error_reporting = '${ERROR_REPORTING}'/' /etc/php.ini touch $ERROR_LOG chown apache:apache $ERROR_LOG #The ; in the next line is because the line is commented by default on RHEL5 sed -i 's/;error_log = […]
我想通过SSH初始login时运行脚本,该脚本向用户login显示一些有用的信息。但是,我不希望此脚本在每个login中都运行。 也就是说,如果用户在login后启动screen ,则不应该再次运行自定义的“motd”(也不会创build后续屏幕)。 特别要注意的是,脚本将需要用户的最终ENV才能正常工作。 这可能吗? 如果是这样,我该如何去做呢?
我有3个CentOS 6.3虚拟服务器,我pipe理。 我有他们所有的设置和configuration,但是记住不时地运行yum update是非常糟糕的。 有无论如何,当通过SSHlogin到terminal时,我可以通知有多less更新可用(如果有的话)。 最好只有在有更新的情况下。 我怀疑我需要configuration一个命令运行.bash_profile但似乎无法find正确的命令使用谷歌。
我有一些脚本使用coproc来控制subprocess的标准输出/标准input。 不幸的是,coproc是在Bash 4.0中引入的,在我使用的很多系统中,有一个早期版本的bash。 有coproc的替代品吗?
我是Linux新手(使用Ubuntu 10.10),我想添加一个函数.bashrc启动/停止一个tomcat服务器。 我试图parsing命令“tomcat”的两个选项。 我已经尝试了以下各种排列,但没有一个工作。 export CATALINA_HOME=/tomcat/directory function tomcat { if [$1 = "-s" ]; then `sh $CATALINA_HOME/bin/startup.sh` elif [$1 = "-x"]; then `sh $CATALINA_HOME/bin/shutdown.sh` else echo "Enter '-s' to start Tomcat, '-x' to shutdown." fi } 为什么这不工作? 什么是正确的方法来做到这一点? 谢谢!
我在一家软件公司实习,我碰到了一堵砖墙。 这是交易: 问题:我们在这里有一些框被错误地分区为2 x 500 GB的驱动器。 实际驱动器是2 x 1 TB驱动器。 这些本质上是只有一半可用磁盘空间的机器。 我的任务是编写一个脚本来重新分区这些驱动器。 迄今为止的解决scheme:我有一个脚本,禁用所有进程和重新启动,然后修复分区的另一个脚本。 问题是数据丢失。 我在找什么:我需要一个解决scheme,但保存所有的数据。 我的第一个虽然只是将分区扩大到适当的大小,但我不知道这是可能的。 另一种解决scheme是将所有数据复制到Disk2,分区Disk1,将数据移回到Disk1,最后分区Disk2。 问题是,我对Linux很新,我不知道该怎么做。 我有权访问fdisk实用程序和分开的实用程序。 他们都是types的ext3。 编辑:11/3/11 好的。 所以我在两个磁盘上都有大约1GB未使用的未分配空间。 我想做如下: 在大小为1GB的SDB上创build一个新的扩展分区,在这里称为sdb99 将sda5 sda6 sda7复制到新的SDB分区sdb99 我可以从这些新的分区中的每个文件夹复制“/”到某个文件夹吗? 我是否需要在这个新的分区上放置一个文件系统来复制那个文件? 如果我只是复制“/”,将保存整个目录结构? 像这样在磁盘之间移动文件是一个简单的任务吗? 删除sda5 sda6 sda7 ,然后用两倍的大小重新创build它们 我真的需要删除这些吗? 我不认为我可以增长3个连续的分区,即使可以,文件系统也不会增长…对吧? 将数据从sdb99复制到新的sda5 sda6 sda7分区 这应该像移动包含所有“/”的目录的内容一样简单,对吧? 将sdb5 sdb6 sdb7复制到新的sda5 sda6 sda7到不同的文件夹中。 应该有足够的空间,因为现在增加了一倍的空间…我希望 删除并重新分区SDB 将文件从sdb5 sdb6 sdb7移回到SDB 有没有人看到任何明显的问题,有任何指针,警告,build议等? 感谢大家。 再次,这需要脚本。 […]
我试图删除所有不以__开头的文件。 这个 ls | grep -v "__" | xargs -0 rm 收益率: File name too long 。 任何帮助? 编辑: ls | grep -v "__" | awk '{print("rm \42"$0"\42")}' | /bin/bash 解决了这个问题,但我想知道为什么第一个是不正确的。 谢谢
我正在使用AWK来读取我有的自定义日志文件。 格式是这样的: [12:08:00 +0000] 192.168.2.3 98374 "CONNECT 192.168.2.4:8091 HTTP/1.0" 200 现在,我有AWK(来自bash)设置为读取整个日志,分析每一行,并抓住每一行包含“连接”的工作,但是,它并没有帮助我发现独特的客户端。 做到这一点的方法是以某种方式过滤它,以便它分析每行的这一部分:“CONNECT 192.168.2.4:8091 HTTP / 1.0” 如果有一种方法可以抓取日志文件中的所有行,那么将它们全部进行比较,只计算类似的行。 举个例子: [12:08:00 +0000] 192.168.2.3 98374 "CONNECT 192.168.2.6:8091 HTTP/2.0" 200 [12:08:00 +0000] 192.168.2.3 98374 "CONNECT 192.168.2.9:8091 HTTP/2.0" 200 [12:08:00 +0000] 192.168.2.3 98374 "CONNECT 192.168.2.2:8091 HTTP/2.0" 200 [12:08:00 +0000] 192.168.2.3 98374 "CONNECT 192.168.2.9:8091 HTTP/2.0" 200 在这种情况下,我需要的答案是3,而不是4.因为2行是相同的,所以只有3个独特的行。 我需要的是用AWK自动完成这个任务。 如果任何人都可以伸出一个很棒的手。
我想弄清楚如何删除旧的日志文件,我使用Centos 6.5,并在我的/var/log我看到这些旧的日志文件 messages messages-20150802 messages-20150802 在/var/log/httpd目录中也是一样的 access_log access_log-20150802 access_log-20150809 access_log-20150816 access_log-20150823 我需要删除以数值结尾的旧文件,但保留一次主文件。 我可以用什么命令来做到这一点。 先谢谢了