一. Crontab 介绍
crontab命令的功能是在一定的时间间隔调度一些命令的执行。
1.1 /etc/crontab 文件
在/etc目录下有一个crontab文件,这里存放有系统运行的一些调度程序。每个用户可以建立自己的调度crontab。
如:
[root@dave ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
1.2 /etc/cron.deny 和 /etc/cron.allow 文件
/etc/cron.deny 表示不能使用crontab 命令的用户
/etc/cron.allow 表示能使用crontab的用户。
如果两个文件同时存在,那么/etc/cron.allow 优先。
如果两个文件都不存在,那么只有超级用户可以安排作业。
每个用户都会生成一个自己的crontab 文件。这些文件在/var/spool/cron目录下:
如:
[root@dave ~]# cd /var/spool/cron
[root@dave cron]# ls
oracle root
我们直接查看这个文件,里面的内容和对应用户显示的crontab -l 一致。
[root@dave cron]# cat oracle
00 6 * * * /u02/scripts/del_st_archive.sh >/u02/scripts/del_st_arch.log 2>&1
[root@dave cron]# cat root
0 12 * * * /root/bin/sync-clock.sh
[root@dave cron]#
二. Crontab 使用说明
2.1 Crontab语法
usage: crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
-i (prompt before deleting user's crontab)
-s (selinux context)
其中,file是命令文件的名字。如果在命令行中指定了这个文件,那么执行crontab命令,则将这个文件拷贝到crontabs目录下;如果在命令行中没有制定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将他们也存放在crontab目录下。
帮助:
[root@dave ~]# man crontab
CRONTAB(1) CRONTAB(1)
NAME
crontab - maintain crontab files for individual users (ISC Cron V4.1)
SYNOPSIS
crontab [-u user] file
crontab [-u user] [-l | -r | -e] [-i] [-s]
DESCRIPTION
Crontab is the program used to install, deinstall or list the tables used to drive the cron(8) daemon in ISC Cron. Each user can have their own crontab, and though these are files in /var/spool/ , they are not intended to be edited directly. For SELinux in mls mode can be even more crontabs - for each range. For more see selinux(8).
If the cron.allow file exists, then you must be listed therein in order to be allowed to use this command. If the cron.allow file does not exist but the cron.deny file does exist, then you must not be listed in the cron.deny file in order to use this command. If neither of these files exists, only the super user will be allowed to use this command.
OPTIONS
-u It specifies the name of the user whose crontab is to be tweaked. If this option is not given, crontab examines "your" crontab, i.e., the crontab of the person executing the command. Note that su(8) can confuse crontab and that if you are running inside of su(8) you should always use the -u option for safety¡¯s sake. The first form of this command is used to install a new crontab from some named file or standard input if the pseudo-filename "-" is given.
-l The current crontab will be displayed on standard output.
-r The current crontab will be be removed.
-e This option is used to edit the current crontab using the editor specified by the VISUAL or EDITOR environment variables. After you exit from the edi-tor, the modified crontab will be installed automatically.
-i This option modifies the -r option to prompt the user for a ¡¯y/Y¡¯ response before actually removing the crontab.
-s It will append the current SELinux security context string as an MLS_LEVEL setting to the crontab file before editing / replacement occurs - see the documentation of MLS_LEVEL in crontab(5).
SEE ALSO
crontab(5), cron(8)
FILES
/etc/cron.allow
/etc/cron.deny
STANDARDS
The crontab command conforms to IEEE Std1003.2-1992 (¡®¡®POSIX¡¯¡¯). This new command syntax differs from previous versions of Vixie Cron, as well as from the classic
SVR3 syntax.
DIAGNOSTICS
A fairly informative usage message appears if you run it with a bad command line.
AUTHOR
Paul Vixie <vixie@isc.org>
4th Berkeley Distribution 16 Januar 2007 CRONTAB(1)
2.2 Crontab 格式说明
我们可以用crontab -e 添加要执行的命令。 命令执行的结果,无论是标准输出还是错误输出,都将以邮件形式发给用户。
添加的命令必须以如下格式:
* * * * * /command path
前五个字段可以取整数值,指定何时开始工作,第六个域是字符串,即命令字段,其中包括了crontab调度执行的命令。 各个字段之间用spaces和tabs分割。
前5个字段分别表示:
分钟:0-59
小时:1-23
日期:1-31
月份:1-12
星期:0-6(0表示周日)
默认参数在函数参数较多时是非常有用的.可以只传必须的值,其它取默认值.使用方法如下:
1.默认参数是严格按照从左至右的顺序使用
所以只有如下使用才是合法的
(1)参数全部为默认值. void Fun( int a = 1, int b = 2, int c = 3)
(2)void Fun(int a , int b = 2, int c = 3)
(3)void Fun(int a , int b = 2, int c) //这样是错误的,如果从某处开始使用默认值,则右边所有其他参数也必须有默认值
调用函数的时候传进去的实参个数必须大于或等于无默认值的形参个数.然后匹配参数的时候是从左至右去匹配.不过这样会存在一些问题.
例如
void Fun( int one , int two = 2, int three = 3);
当调用时如果用户想只传两个参数提供one和three的值是做不到的,因为必须从左至右严格匹配,所有要想传值给three,就必须给它前面的所有参数也传值.
自然也有人想到了这问题,于是建议C++之父stroustrup增加一个特性,可以显式指定给第几个参数赋值.比如调用上面函数时可以这样Fun(one = 1 ,three = 3),甚至还可以不按顺序
Fun(three = 3, one = 1)这样用户可以随意指定要赋值给哪个参数,当然没有默认值的参数肯定是要保证都有赋值的. 在PL/SQL中的函数调用就完全体现了这种思想.
不过stroustrup觉得这样做带来的好处不是太大,而且有些弊端,于是就没有在C++中添加这特性.比较容易想到的弊端就是由于函数声明和定义中的形参名字是可以不一样的.这样就一来靠形参名字来显式指定传的实参就比较麻烦了.例如声明是void Fun(int one , int two);但定义变成了void Fun(int two, int one) { }
2.参数默认值只能在声明或定义中一处指定.不能同时指定.
例如有类Arwen,然后在头文件中声明函数FunDefault.然后cpp文件中定义.可以用如下两种方式
方法(1)
int FunDefault( int one , int two = 123); //声明
int Arwen::FunDefault(int one , int two) //定义
{
//....
}
方法(2)
int FunDefault( int one , int two );
int Arwen::FunDefault(int one , int two = 123)
{
//....
}
但如下是错误的
方法(3)
int FunDefault( int one , int two = 123 );
int Arwen::FunDefault(int one , int two = 123)
{
//....
}
实际上按道理讲方法(3)是最直观,最易理解的.但可能考虑到一来嘛两个地方都重复赋值下有点麻烦,二来编译器还要去做判断保证两个默认值要一致,所以就干脆不让这样做了.
3.默认参数与函数重载的二义性问题.
假如有函数
void Fun(int one, int two = 2);
void Fun(int one);
当这样调用时Fun(1);上面两个函数都是完全匹配的.所以就有二义性了,编译的时候会报错的.
不过有点奇怪的是只要你是同时有函数声明和定义时才会报错.如果声明和定义是在一起,都在头文件中,也就是内联函数(inline)时,上面这样使用不会报错.Fun(1)调用的是void Fun(int one ,int two = 2); 我是在VS中试的,不知道其他编译器是否做同样的处理
当然了最好我们在代码中避免出现这样的情况.实际上很多时候默认参数就是用来替代函数重载(就像上面的两函数,当一个函数只是比另外一个函数的参数个数多,其他参数相同).所以设计良好的代码应该是没有必要同时存在这样的默认参数与重载函数的
注意:
WebService的注解@WebService在发布的时候是不发布静态、私有的方法为外部调用的
1、得到根据源代码的方式生成调用代码
除了通过url的方式可以生成服务器端的调用代码。我们也可以通过解析wsdl文件来生成调用代码。
Ø 制作wsdl文件的方法
浏览器访问wsdl文件。比如http://192.168.1.103:8888/hello?wsdl页面右键---查看源代码----文件另存为即可。
然后还是用wsimport命令。命令如下:(前提是进入wsdl文件所在目录)
wsimport -s .file:\\\d:/wstest/hello.wsdl
然后拷贝生成的代码编写客户端程序调用即可
2、利用MyEclipse的WebService视图调用webserviceØ 除了客户端生成代码编写程序调用之外。还可以用MyEclipse提供的WebServi
Ce视图来更加清晰的调用和分析
1、 点击工具栏上的lanchweb service
2、 操作弹出框
3、直接操作方法
点击go之后会出现该wsdl文件所表示的内容。包括方法、参数等。我们可以直接操作就可以达到调用的效果
Webservice就是一个跨平台的应用。不管是什么语言都可以互相调用