linux 下 crontab 命令

linux定时任务命令 crontab 详细解释

任务调度的crond常驻命令
crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而linux任务调度的工作主要分为以下两类:
1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置Crontab是UNIX系统下的定时任务触发器,其使用者的权限记载在下列两个文件中:文件含义

/etc/cron.deny

该文件中所列的用户不允许使用Crontab命令

/etc/cron.allow

该文件中所列的用户允许使用Crontab命令

/var/spool/cron/

是所有用户的crontab文件

/var/spool/cron/crontabs
/var/spool/cron/crontabs
Crontab命令的格式为:crontab –l|-r|-e|-i [username],其参数含义如表一:

参数名称

含义

示例

-l

显示用户的Crontab文件的内容

crontabl –l

-i

删除用户的Crontab文件前给提示

crontabl -ri

-r

从Crontab目录中删除用户的Crontab文件

crontabl -r

-e

编辑用户的Crontab文件

crontabl -e

用户所建立的Crontab文件存于/var/spool/cron中,其文件名与用户名一致。
它的格式共分为六段,前五段为时间设定段,第六段为所要执行的命令段,
格式如下:* * * * *
其时间段的含义如表二:

段 含义 取值范围

第一段 代表分钟 0—59

第二段 代表小时 0—23

第三段 代表日期 1—31

第四段 代表月份 1—12

第五段 代表星期几,0代表星期日 0—6

名称 : crontab
使用权限 : 所有使用者
使用方式 :
crontab [ -u user ] file
crontab [ -u user ] { -l | -r | -e }
说明 :
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
餐数 :
-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
-r : 删除目前的时程表
-l : 列出目前的时程表
时程表的格式如下 :
f1 f2 f3 f4 f5 program

其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推
使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。
例子 :
每月每天早上7点执行一次 /bin/ls :
0 7 * * * /bin/ls

在 12 月内, 每天的早上 6 点到 12 点中,每隔 3 小时执行一次 /usr/bin/backup :
0 6-12/3 * 12 * /usr/bin/backup

周一到周五每天下午 5:00 寄一封信给 alex@domain.name :
0 17 * * 1-5 mail -s “hi” alex@domain.name  /dev/null 2>&1 即可
例:如果用户的Crontab文件的内容是:29 19 * * * echo its dinner time,则系统每天的19:29显示‘its dinner time’
示例(创建一个cron全过程,每分钟都会在test.txt里输入当前时间):

1.     以普通用户登录linux系统(我用的是CentOS4.1)

2.     $crontab –e
说明:系统默认的编辑器是VIM,如果不是请加上以下shell:
$EDITOR=vi
$export EDITOR

3.     输入”*/1 * * * * date >> $HOME/test.txt”,save and exit VIM

4.     $su root

5.     $cd /etc/init.d

6.     ./crond restart

下面看看看几个具体的例子:
● 0 */2 * * * /sbin/service httpd restart  意思是每两个小时重启一次apache,特别说明,当间隔值不是可选值的整除数是,以整除数为准,举下面的栗子:
*/7 * * * * /sbin/service httpd restart 看上去是每隔7分钟重启一次apache,实际情况的每个整点的时候执行意思,然后分钟是7的倍数的时候执行一次,即每小时的 0、7、14、21、28、35、42、49、56 分钟时执行一次

● 50 7 * * * /sbin/service sshd start  意思是每天7:50开启ssh服务

● 50 22 * * * /sbin/service sshd stop  意思是每天22:50关闭ssh服务

● 0 0 1,15 * * fsck /home  每月1号和15号检查/home 磁盘

● 1 * * * * /home/bruce/backup  每小时的第一分执行 /home/bruce/backup这个文件

● 00 03 * * 1-5 find /home “*.xxx” -mtime +4 -exec rm {} \;  每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
● 30 6 */10 * * ls  意思是每月的1、11、21、31日 的6:30执行一次ls命令

crontab中的输出配置

crontab中经常配置运行脚本输出为:>/dev/null 2>&1,来避免crontab运行中有内容输出(此处须注意,默认的情况下crontab会给系统自己发邮件,从而浪费相当大的磁盘空间)。
shell命令的结果可以通过‘> ’的形式来定义输出
/dev/null 代表空设备文件
> 代表重定向到哪里,例如:echo “123” > /home/123.txt
1 表示stdout标准输出,系统默认值是1,所以”>/dev/null”等同于”1>/dev/null”
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
那么重定向输出语句的含义:
1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,不显示任何信息。
2>&1 表示标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

 

httpsql的安装与使用

httpsqs缓存队列,可用来解决高i/o问题,一般作为数据库写操作的外缓冲

1.安装libevent-2.0.12-stable.tar.gz
wget http://httpsqs.googlecode.com/files/libevent-2.0.12-stable.tar.gz
tar zxvf libevent-2.0.12-stable.tar.gz
cd libevent-2.0.12-stable/
./configure –prefix=/usr/local/libevent-2.0.12-stable/
make
make install
cd ../
2.安装tokyocabinet-1.4.47.tar.gz
wget http://httpsqs.googlecode.com/files/tokyocabinet-1.4.47.tar.gz
tar zxvf tokyocabinet-1.4.47.tar.gz
cd tokyocabinet-1.4.47/
./configure –prefix=/usr/local/tokyocabinet-1.4.47/
#注:在32位Linux操作系统上编译Tokyo cabinet,请使用./configure –enable-off64代替./configure,可

以使数据库文件突破2GB的限制。
#./configure –enable-off64 –prefix=/usr/local/tokyocabinet-1.4.47/
make
make install
cd ../
当执行第二步骤的会出错,是由于缺少bzip2-1.0.6.tar.gz
下面进行安装

http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz安装开始;
wget  http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz
tar -xvzf bzip2-1.0.6.tar.gz
cd bzip2-1.0.6.
make
make install
在重复安装tokyocabinet-1.4.47.tar.gz还是失败,由于缺少zlib-1.2.5.tar.gz
下面进行安装

http://www.winimage.com/zLibDll/zlib-1.2.5.tar.gz安装开始;
wget  http://www.winimage.com/zLibDll/zlib-1.2.5.tar.gz
tar -xvzf zlib-1.2.5.tar.gz
cd zlib-1.2.5.
./configure
make
sudo make instal
继续第2步骤 OK
3.安装httpsqs-1.7.tar.gz

wget http://httpsqs.googlecode.com/files/httpsqs-1.7.tar.gz
tar zxvf httpsqs-1.7.tar.gz
cd httpsqs-1.7/
make
make install
cd ../
4.测试

如果安装成功 执行httpsqs –h 会出现
————————————————————————————————


HTTP Simple Queue Service – httpsqs v1.7 (April 14, 2011)

Author: Zhang Yan (http://blog.s135.com), E-mail: net@s135.com
This is free software, and you are welcome to modify and redistribute it under the New BSD

License

-l <ip_addr>  interface to listen on, default is 0.0.0.0
-p <num>      TCP port number to listen on (default: 1218)
-x <path>     database directory (example: /opt/httpsqs/data)
-t <second>   keep-alive timeout for an http request (default: 60)
-s <second>   the interval to sync updated contents to the disk (default: 5)
-c <num>      the maximum number of non-leaf nodes to be cached (default: 1024)
-m <size>     database memory cache size in MB (default: 100)
-i <file>     save PID in <file> (default: /tmp/httpsqs.pid)
-a <auth>     the auth password to access httpsqs (example: mypass123)
-d            run as a daemon
-h            print this help and exit

 

5.设置

存储目录

#mkdir /usr/local/httpsqs_queue

mkdir /home/bf
vi /home/bf/httpsqs.sh
内容如下:
#! /bin/sh
ulimit -SHn 65535

启动方法

带密码

# /usr/bin/httpsqs -d -p 1218 -t 10 -c 10000 -m 512 -x /usr/local/httpsqs_queue -a pwd123

无密码

# /usr/bin/httpsqs -d -p 1218 -t 10 -c 10000 -m 512 -x /usr/local/httpsqs_queue

干掉的方法
# killall httpsqs

 

注意需要打开防火墙端口

vim /etc/sysconfig/iptables

添加下面一行,打开防火墙1218端口:

-A INPUT -m state –state NEW -m tcp -p tcp –dport 1218 -j ACCEPT

重启防火墙

#/etc/init.d/iptables restart

 

 

6.使用

写队列
http://192.168.2.103:1218/?name=your_queue_name&opt=put&data=TEXT&auth=pwd123

 

读队列
http://192.168.2.103:1218/?charset=utf-8&name=your_queue_name&opt=get&auth=pwd123

 

写队列无密码
http://192.168.2.103:1218/?name=your_queue_name&opt=put&data=TEXT

 

读队列无密码
http://192.168.2.103:1218/?charset=utf-8&name=your_queue_name&opt=get
 

 

 

写队列
http://192.168.2.103:1218/?name=your_queue_name&opt=put&data=TEXT&auth=pwd123

 

读队列
http://192.168.2.103:1218/?charset=utf-8&name=your_queue_name&opt=get&auth=pwd123

 

7.php扩展

参考:http://code.google.com/p/php-httpsqs-client/

安装说明

# mkdir php_httpsqs_client 
# cd php_httpsqs_client 
# wget http://php-httpsqs-client.googlecode.com/files/php_httpsqs_client_0.2.1.tar.gz
# tar vzxf php_httpsqs_client_0.2.1.tar.gz
# /usr/local/php/bin/phpize
如果

运行/usr/local/webserver/php/bin/phpize时出现: Configuring for: PHP Api Version:         20041225 Zend Module Api No:      20060613 Zend Extension Api No:   220060519 Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script. 根据网上的解决办法是: yum install m4 yum install autoconf

 

# ./configure --enable-httpsqs --with-php-config=/usr/local/php/bin/php-config 
# make && make install
#接着在php.ini中添加一行 
extension=httpsqs.so;

 

函数说明

/** 
 * 创建httpsqs连接 
 * @param string $host 服务器地址,可以为空,默认为127.0.0.1 
 * @param int    $port 服务器端口,可以为空,默认为1218 
 * @return resource 
 */ 
$hr = httpsqs_connect("127.0.0.1", 1218);
/** 
 * 写入队列数据 
 * @param resource $hr      服务器连接句柄 
 * @param string   $queue   队列名称 
 * @param string   $data    写入数据 
 * @param string   $charset 字符集,可以为空,默认为utf-8 
 * @return boolean 
 */ 
$putRes = httpsqs_put($hr, "testQueue", "This is a test Data", "UTF-8");
/**  
 * 获取队列最后一条数据 
 * @param resource $hr 
 * @param string   $queue 
 * @param boolean  $return_array 是否返回数组,可以为空,默认为false 
          返回数组格式:array('pos'=>'队列插入点', 'data'=>'数据值') 
 * @param string   $charset 可以为空 
 * @return mixed 
 */ 
$content = httpsqs_get($hr, "testQueue", true, "UTF-8");
/** 
 * 获取队列状态 
 * @param resource $hr 
 * @param string   $queue 
 * @param boolean  $return_json 是否返回状态的json格式,可以为空,默认为false 
 * @return string 
 */ 
$status = httpsqs_status($hr, "testQueue", true);
/** 
 * 获取队列某个点数据 
 * @param resource $hr 
 * @param string   $queue 
 * @param int      $pos 要获取的某条数据的位置 
 * @param string   $charset 可以为空 
 * @return string 
 */ 
$posData = httpsqs_view($hr, "testQueue", 10, "UTF-8");
/** 
 * 队列重置 
 * @param resource $hr 
 * @param string   $queue 
 * @return boolean 
 */ 
$resetRes = httpsqs_reset($hr, "testQueue");
/** 
 * 设置队列最大数据条数 
 * @param resource $hr 
 * @param string   $queue 
 * @param int      $maxqueue 队列最大数据条数 
 * @return boolean 
 */ 
$maxqueueRes = httpsqs_maxqueue($hr, "testQueue", 10000);
/** 
 * 修改定时刷新内存缓冲区内容到磁盘的间隔时间 
 * @param resource $hr 
 * @param string   $queue 
 * @param int      $synctime 间隔时间 
 * @return boolean 
 */ 
$synctimeRes = httpsqs_synctime($hr, "testQueue", 10);

 

对象调用

// 参数与httpsqs_connect对应 
$hr = new HttpSQS($host, $port); 

// 参数与httpsqs_get对应 
$hr->get($queuename, $return_array, $charset); 

// 参数与httpsqs_put对应 
$hr->put($queuename, $data, $charset); 

// 参数与httpsqs_status对应 
$hr->status($queuename, $return_json); 

// 参数与httpsqs_view对应 
$hr->view($queuename, $pos); 

// 参数与httpsqs_reset对应 
$hr->reset($queuename); 

// 参数与httpsqs_maxqueue对应 
$hr->maxqueue($queuename); 

// 参数与httpsqs_synctime对应 
$hr->synctime($queuename);

 

示例

// 取数据Daemon 
$hr = httpsqs_connect($host, $port); 
while (1) { 
    $data = httpsqs_get($hr, $queuename, $charset); 
    if ($data === false) { 
       sleep(1); 
    } else { 
      // do something... 
    } 
} 

// 或者 
$hr = new HttpSQS($host, $port); 
while (1) { 
    $data = $hr->get($queuename, $charset); 
    if ($data === false) { 
        sleep(1); 
    } else { 
      // do something... 
    } 
} 

// 写数据 
$hr = httpsqs_connect($hort, $port); 
httpsqs_put($hr, $queuename, $data, $charset); 

// 或者 
$hr = new HttpSQS($hort, $port); 
$hr->put($queuename, $data, $charset);

 

写入

<?php
$hr = httpsqs_connect(“127.0.0.1”, 1218);
$putRes = httpsqs_put($hr, “testQueue”, “Text”, “UTF-8”);
?>

读取

<?php
$hr = httpsqs_connect(“127.0.0.1”, 1218);
$content = httpsqs_get($hr, “testQueue”, true, “UTF-8”);
//print_r($content);
echo $content[‘data’];

?>

 

文章来源:http://blog.csdn.net/21aspnet/article/details/7467812#comments

nginx 安装问题

安装nginx报错

按理来说,装个nginx是很简单的,诸如用:yum install nginx,这个确实没什么问题,可是我想通过编译源码的方式安装,而且还要开启一些功能,例如:pcre zlib openssl。

开始把pcre(www.pcre.org),zlib(www.zlib.org),openssl(www.openssl.org) 都下载,编译安装好了,然后开始编译安装nginx-0.8.53。

./configure –prefix=/usr/local/nginx –user=www –group=www –with-http_gzip_static_module –with-http_stub_status_module –with-http_ssl_module –with-pcre=/usr/local/pcre –with-zlib=/usr/local/zlib –with-openssl=/usr/local/openssl –with-http_realip_module

这步没什么问题,接下来make,问题出来了:

cd /usr/local/pcre \
&& if [ -f Makefile ]; then make distclean; fi \
&& CC=”gcc” CFLAGS=”-O2 -fomit-frame-pointer -pipe ” \
./configure –disable-shared
/bin/sh: ./configure: No such file or directory
make[1]: *** [/usr/local/pcre/Makefile] Error 127
make[1]: Leaving directory `/software/nginx-0.8.53′
make: *** [build] Error 2

怎么捣鼓也没搞定,无意间 ./configure –help

看一下帮助说明:

–with-pcre=DIR set path to PCRE library sources

注意:set path to PCRE library sources是让你设置到源码目录,而不是编译安装后的目录,顿时恍然大悟。

迅速把上面几个依赖包的路径都改成源码路径:

./configure –prefix=/usr/local/nginx –with-http_gzip_static_module –with-http_stub_status_module –with-http_ssl_module –with-pcre=/software/pcre-8.10 –with-zlib=/software/zlib-1.2.5 –with-openssl=/software/openssl-1.0.0a –with-http_realip_module

重新执行,OK。

文章来源:http://hi.baidu.com/mchina_tang/item/0c3d00941e28775df042153d

vim ctrl+s 的问题

我在使用vim的时候,偶尔会碰到vim莫名其妙的僵在那里。在界面上输入什么都没有反应。甚至Ctrl+C、Ctrl+D也没有反应。

由于不是经常发生,也就没在意。每次很麻烦的关掉putty的窗口,重新再打开putty。今天发生了好几次,很是郁闷。就想看看究竟是怎么回事,结果发现每次按下Ctrl+S就会出现这个问题。

由于以前碰到过vim有些扩展有问题,这次就也怀疑是vim扩展的问题。结果删除了所有扩展和.vimrc文件,问题依旧。通过putty登录到别的系统,也是一样的问题。直接在ubuntu的命令行,按下Ctrl+S,问题也一样!

奥,原来是Linux的一个快捷键呀,干什么用的?

原来Ctrl+S在Linux里,是锁定屏幕的快捷键。如果要解锁,按下Ctrl+Q就可以了。

好吧,接受教训吧。以后碰到问题要勤快点,越早解决越少麻烦。
现在让我记牢点这两个组合键Ctrl+SCtrl+Q

转载自http://www.leonzhang.com/2010/06/09/vim_hangu_by_ctrl_s/