linux编写定时任务

linux中定时任务用来执行一些周期性的自动化的任务,比如有些人可能用来定期备份,也可能是定期检查一下特殊文件的签名,如果不一致,就报警,检测入侵。 cron是linux下的定时执行工具 这个工具的几个命令是这样的 /sbin/service crond start //启动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 /sbin/service crond reload //重新载入配置 注意,这几个服务都是要以root权限才能运行的,很多时候,只要我们可能只是一个低权限的用户,那么我们要执行一些定时任务的时候,可以这样做 直接通过这个命令来编辑,无需root用户 crontab 首先添加定时任务 crontab -e 打开之后按如下的格式编写 */1 * * * * ls >> /tmp/ls.txt 从左到右一次表示 分钟 一小时的第几分 0-59 小时 一天的第几小时 0-23 日期 一个月的的第几天 1-31 月份 一年的第几个月 1-12 周几 一周的第几天 0-6 /1表示每一天 /2表示每两天,直接*的话就表示每天/每小时这样 写完之后,wq保存退出 然后 crontab -l //列出当前的所有调度任务 可以看到自己的定时任务了,然后就不要做什么操作了,操作系统定时会读取配置的,编辑完成之后,我们的定时任务过一会就会生效了。 有时候,可能还要把结果信息和一些错误信息也写入 30 5 * * * ls >>/result/test 2>&1 注:2>&1 表示执行结果及错误信息。 这里就是说明天的5点50执行一次ls命令,并把结果追加到文件 [Read More]

linux的CPU负载均值

当运行在Linux上的程序有问题之后,我们通常要看一下当前CPU和内存的使用情况来分析一下问题

对于CPU的使用率,通常用Load Average,也就是负载均值来度量

负载均值是啥?

负载是啥,负载就是对CPU使用率的一个计量,均值就是某一段时间内的一个平均值。

怎么看啊?

直接输入w命令

# w
20:02:51 up 23 days, 8:10, 2 users, load average: 1.20, 1.28, 1.29
第一位1.20:表示最近1分钟平均负载 第二位1.28:表示最近5分钟平均负载 第三位1.29:表示最近15分钟平均负载

或者uptime命令

$ uptime
09:50:21 up 200 days, 15:07, 1 user, load average: 0.27, 0.33, 0.37
我们一般认为0.00表示无负载,可以理解为CPU空闲,1.00表示CPU满负载,但是注意,1.00是对于单cpu来说的,也就是说,如果是双核,那么这个满负载显示的值应该是2.00,以此类推。

怎么看我是几核啊

grep ‘model name’ /proc/cpuinfo | wc -l
通过统计cpuinfo的model name信息来算的

这三个值哪个重要?

一分钟内突然负载很大没关系,当然如果你要排查也没人拦着,如果15分钟的负载均值超过cpu的数目,就要关注了。

那什么就是理想负载呢?

以单个cpu为例,1.00表示cpu满负载运行,没有一点点浪费,实际上,有些管理员认为0.7也许是理想的状态。如果你的经常超过0.7,那么最好查一查。

[笔记]写代码遇到的一些问题汇总下

本篇是用来填上一篇 挖下的坑的。 1.java调用webservice 有一些已有的webservice服务,由xfire生成发布,有些有参数,有些无参数,无参数的直接我直接使用org.codehaus.xfire这个包里的Client来动态生成客户端。然后调用就可以了。非常简单 Client client = null; try { client = new Client( new URL( “http://leaver.me/testService?wsdl")); client.invoke(“refreshAllCache”, new Object[0]); } catch (MalformedURLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }</pre> 但对于有参的,且是服务器自定义的类作为参数的时候,实在是搞不定。。不管是把自定义的类放到本地,包名一致,在invoke的时候生成这个对象还是其他什么方法。都无法完成。 最终换了直接发送soap报文来完成。dirty hack啊。如果你有一些好的方法希望不吝赐教。 解决方案来源自stackoverflow,因为stackoverflow现在国内好像有时候打不开。因此把代码贴过来。有疑问的话留言讨论。 import javax.xml.soap.; import javax.xml.transform.; import javax.xml.transform.stream.*; public class SOAPClientSAAJ { /** * Starting point for the SAAJ - SOAP Client Testing */ public static void main(String args[]) { try { // Create SOAP Connection SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory. [Read More]

Unix sed实用教程系列目录

本系列文章已经译完了,译自awk-sed@theunixschool,收获颇丰,作者没有将明白的我做了补充,并且尝试讲的更清楚,整理成系列索引,方便学习,开篇非译文,是我为了方便后面的理解写的一篇,感谢原作者的分享.有任何问题欢迎留言讨论.

[译]Unix sed实用教程第八篇–CSV文件操作

本文作为sed使用教程的最后一篇,将比较全面的讲解如何操作csv文件,csv文件通过逗号分隔 示例文件如下: cat file Solaris,25,11 Ubuntu,31,2 Fedora,21,3 LinuxMint,45,4 RedHat,12,5 1.删除第一列 $ sed ’s/[^,]*,//’ file 25,11 31,2 21,3 45,4 12,5 s开启替换模式,当^符号在中括号里的时候,就是非的意思,也就是说[^,]匹配了所有不是逗号的一个字符,然后后面的星号表示0个或多个,然后是一个逗号,也就是匹配”xxxx,“替换为空 2.删除除过最后一列的其他所有 $ sed ’s/.*,//’ file 11 2 3 4 5 sed先匹配任意多个字符,然后匹配最后一个“,”这就直接把前面的都匹配完了。替换为空即可。 3.输出第一列 $ sed ’s/,.*//’ file Solaris Ubuntu Fedora LinuxMint RedHat 好理解把,先匹配第一列之后的逗号,然后是多个字符,然后替换为空 4.删除第二列 $ sed ’s/,[^,]*,/,/’ file Solaris,11 Ubuntu,2 Fedora,3 LinuxMint,4 RedHat,5 先匹配第一列之后的逗号,然后匹配一个或多个非逗号字符,这样就匹配了第二列的内容,然后再匹配一个逗号,我简化一下,比如该列是1,2,3,4,那么这一个匹配就是”,2,“,替换成一个逗号,就是1,3,4了 5.输出第二列 $ sed ’s/[^,],([^,])./\1/’ file 25 31 21 45 12 我们可以分析前两个斜线之间的内容 [^,],([^,]). 两个右斜线转移了括号,所以括号不是简单的符号,而是正则里的组的意义,圆括号的作用是对字符进行分组,并保存匹配的文本。这里先匹配非逗号的多个字符,然后一个逗号,然后再匹配第二列,并且第二列的匹配用括号括起来,然后匹配其他列,然后里面用\1来引用这个括号的内容,如果前面有两个括号,就可以使用\1或\2这样,分别表示第一个括号或第二个括号的匹配 6.输出最后一列是一位数字的行 $ sed -n ‘/. [Read More]
linux  shell 

[译]Unix sed实用教程第七篇–输出文件内容(10 Demo)

之前已经学习过选择性打印输出了,本文将通过10个例子全面讲解文件输出的一些方法,主打p命令 首先看一下将使用的示例文件 $ cat file AIX Solaris Unix Linux HPUX 1.打印文件首行 $ sed -n ‘1p’ file AIX 之前讲过了,-n取消默认的全部打印,p表示print,1就是行号了 2.输出最后一行 $ sed -n ‘$p’ file HPUX 3.输出不匹配X的那些行 $ sed -n ‘/X/!p’ file Solaris Unix Linux 也好理解,!表示非,就是说包含X匹配的不打印输出 4.输出包含u/x的那些行 $ sed -n ‘/[ux]/p’ file Unix Linux 正则是强大的,这样就匹配了u/x 5.输出以x/X结尾的那些行 $ sed -n ‘/[xX]$/p’ file AIX Unix Linux HPUX 这里$符号不再是匹配文件尾部,而是行尾,这是正则的规则 6.输出以A/L开头的行 $ sed -n ‘/^A|^L/p’ file AIX Linux 前面也说过,^匹配了行首,A表示A匹配,然而|则是或者的意思,为什么要加\转义,是为了避免被解析成pipe管道,后面的就不解释了 7.隔行打印 n命令是输出当前行,然后读入下一行到pattern space的意思,这句命令是这么执行的,首先读入一行,然后通过n命令输出,然后通过n命令再读一行,然后把这行删除,就出现了隔行输出的效果 8.如何两行输出,隔两行再输出 $ sed ’n;n;N;d’ file AIX Solaris HPUX n;n; 命令呢输出了前两行,然后读入第三行到pattern space,N命令则对如下一行并与第三行合并,然后d命令删除pattern space中的内容,于是三四行被清空,然后读入56行,继续重复。就这样。作者这里给出的例子不直观,我举个例子,我的文件内容是 $ cat test. [Read More]
linux  shell 

[译]Unix sed实用教程第六篇–删除文件内容

其实,删除和替换是由一些相同的,不过,这里我们单独列出来,通过25个例子穿插讲解sed删除文件的一些方法,使用的示例文件如下: $ cat file Cygwin Unix Linux Solaris AIX 1.删除第一行 $ sed ‘1d’ file Unix Linux Solaris AIX d就是删除,1就是指第1行,记得哦,这不会影响到源文件,一般,做删除的时候一般要加-i参数,前面说过了 sed -i ‘1d’ file 2.删除指定行,这里删除第3行 $ sed ‘3d’ file Cygwin Unix Solaris AIX 3.删除最后一行 $ sed ‘$d’ file Cygwin Unix Linux Solaris 4.删除范围行,这里删除2-4行 $ sed ‘2,4d’ file Cygwin AIX 5.保留指定的行,这里保留2-4行 $ sed ‘2,4!d’ file Unix Linux Solaris !这个是对前面的2,4来操作,是非的意思,也就是不是2-4行的行,这样除去2-4行,其他的都删除了 6.删除第一行和最后一行 $ sed ‘1d;$d’ file Unix Linux Solaris 分号隔开两个命令,你懂的,也可以删除第二行和第三行等等. ’2d;3d’ 7.删除以指定字符开头的行 $ sed ‘/^L/d’ file Cygwin Unix Solaris AIX 这里就把以L开头的Linux这一行删除了 [Read More]
linux  shell 

[译]Unix sed实用教程第五篇–替换文件内容续

前面已经学习过替换文件内容了,本文我们学习一些更频繁使用的搜索替换操作. 示例文件使用: $ cat file RE01:EMP1:25:2500 RE02:EMP2:26:2650 RE03:EMP3:24:3500 RE04:EMP4:27:2900 1.替换每行开始的两个字母,这里用XX来替换 $ sed ’s/^../XX/’ file XX01:EMP1:25:2500 XX02:EMP2:26:2650 XX03:EMP3:24:3500 XX04:EMP4:27:2900 s代表substitute,前面说过了,^用来匹配行开头,.表示任意一个字符,两个..就是你懂的, 其实,不要^符号也是可以的,因为默认就是从开头开始匹配,如下也可以实现 sed ’s/../XX/’ file 2.删除每行开头的两个字符 $ sed ’s/^..//’ file 01:EMP1:25:2500 02:EMP2:26:2650 03:EMP3:24:3500 04:EMP4:27:2900 看到没有,后两个斜线之间没有内容,也就是用空字符来替换开头的两个字符,就实现了删除 3.要是想删除每行最后的两个字符呢 $ sed ’s/..$//’ file RE01:EMP1:25:25 RE02:EMP2:26:26 RE03:EMP3:24:35 RE04:EMP4:27:29 再次强调,$在不同的情况下表示不同的意思,这里匹配行尾,有时候也匹配文件尾部 4.向每行末尾添加内容 $ sed ’s/$/.Rs/’ file RE01:EMP1:25:2500.Rs RE02:EMP2:26:2650.Rs RE03:EMP3:24:3500.Rs RE04:EMP4:27:2900.Rs 这里,先匹配行尾,然后把”.Rs”添加到行尾 5.在每行开头添加空格 $ sed ’s/^/ /’ file RE01:EMP1:25:Rs.2500 RE02:EMP2:26:Rs.2650 RE03:EMP3:24:Rs.3500 RE04:EMP4:27:Rs.2900 还记得前面说过的么,sed默认不影响原始文件,要是想更新原始文件,请加-i参数 $ sed -i ’s/^/ /’ file $ cat file RE01:EMP1:25:Rs. [Read More]
linux  shell 

[译]Unix sed实用教程第四篇–选择性打印

本文,我们将会学习如何选择性的打印(其实,这里的打印是print,也就是输出到标准输出的意思),用到的示例文件是: $ cat file Gmail 10 Yahoo 20 Redif 18 1.打印所有内容 $ sed “ file Gmail 10 Yahoo 20 Redif 18 一对单引号,没有任何参数即可 2.如何打印包含Gmail的那一行.(grep也可以实现这个功能) $ sed ‘/Gmail/p’ file Gmail 10 Gmail 10 Yahoo 20 Redif 18 在斜线里面,我们指定正则匹配模式,p的意思呢,就是print,打印的意思,也就是打印包含Gmail这一行,但是我们看到Gmail打印了两次,为什么,因为sed的默认行为是在解析完一行之后就把他输出出来,也就是对于Gmail这一行,先执行p解析,解析完成后再默认打印一次,就打印了两次,而其他的,没有命令解析,直接读入完成后输出即可。 如果得到期望的结果呢? $ sed -n ‘/Gmail/p’ file Gmail 10 -n参数会取消sed的默认打印行为,所以就ok了 3.删除包含Gmail的那一行。(grep -v也有同样的效果) $ sed ’/Gmail/d’ file Yahoo 20 Redif 18 d就是delete的意思,不多解释, 同样,要想删除某一指定的行 $ sed ‘1d’ file Yahoo 20 Redif 18 4.打印直到模式匹配,这里我们从头一直打印到Yahoo $ sed ’/Yahoo/q’ file Gmail 10 Yahoo 20 q就是quit的意思,这条命令就是对于前面的行都没啥可解析的,执行默认的打印即可,一到碰到Yahoo这一行,打印完成,就停止,退出,因此,就是上面的了 [Read More]
linux  shell 

[译]Unix sed实用教程第三篇–读写文件

本文将展示如何将文件内容读入到sed输出,同时包含如何将一个文件的部分内容写入到另一文件 一.文件读取 假定有两个文件,file1和file2,内容分别如下: $ cat file1 1apple 1banana 1mango $ cat file2 2orange 2strawberry sed有两个选项用来读写文件 r filename : 读取filename指定的文件内容 w filename : 将内容写入filename指定的文件 看例子: 1.在file1的每一行读完之后读取file2的内容 $ sed ‘r file2’ file1 1apple 2orange 2strawberry 1banana 2orange 2strawberry 1mango 2orange 2strawberry r file2读取file2的所有内容,因此r之前没有知道那个行号或匹配,因此有了上面的输出,记住,sed的工作机制,每次读file1的一行,然后执行命令 2.如何在读取了file1的第一行之后将file2读入 $ sed ‘1r file2’ file1 1apple 2orange 2strawberry 1banana 1mango r前面加个1就行了 3.当file1某行匹配了模式之后,读入file2 $ sed ‘/banana/r file2’ file1 1apple 1banana 2orange 2strawberry 1mango sed逐行读入file1,然后判断该行是否匹配banana,如果匹配,就读入file2 4.当file1读取完成后读入file2,其实就是合并两个文件 $ sed ‘$r file2’ file1 1apple 1banana 1mango 2orange 2strawberry 这里只是演示一下,其实cat file1 file2就可以完成合并 [Read More]
linux  shell