时间任务通常分为两种:
1.atd 一次性时间任务
2.crond 周期性时间任务
1.atd服务,一次性时间任务(只能定时在某一分钟的0秒,无法定时在某一秒上,如果要想定时在秒上,可以使用shell脚本来实现)
# ps -ef | grep atd --查看at服务是否开启
# systemctl start atd --启动atd服务
# systemctl enable atd --设置为开机自启动
如果报未能识别的服务,说明没有安装:
# yum install -y at
atd服务使用格式:
# at 14:14 102016 --在2016年10月20日的14点14分执行一个任务
at> mkdir /testat
at> touch /testat/`date +%T`
at> <EOT> --输入完成后按下 ctrl+d 结束
job 1 at 2016-09-23 14:14 --job 1表示一个时间任务编号,这里是指系统的第一次at任务,所以为1,后面是定时任务执行的时间
at时间任务命令选项:
-l 列出at任务 可直接使用# atq
-d 删除at任务 可直接使用# atrm [时间任务编号]
-c 查看任务内容
-f 后面加<文件> 从指定文件读取任务
如:
# at -l --列出当前系统中未执行的at时间任务 (或 # atq)
3 2014-07-24 15:25 a root
4 2014-07-25 14:25 a root
6 2015-07-24 14:25 a root
# at -d 3 --删除at时间任务中编号为3的时间任务(或 # atrm 3)
# atq --删除后在查看一次还未执行的at时间任务
4 2014-07-25 14:25 a root
6 2015-07-24 14:25 a root
如果你要做的事步骤比较多,则先写成脚本,然后使用at进行调用(-f 选项实例)
at -f xxx.sh
# vim /tmp/1.sh
#!/bin/bash
echo 1 > /dev/pts/1
echo 2 > /dev/pts/1
echo 3 > /dev/pts/1
# at now + 1 minutes -f /tmp/1.sh --当前时间+1分钟后执行/tmp/1.sh
job 2 at 2014-07-24 14:26
# at now + 1 hours -f /tmp/1.sh --当前时间+1小时后执行/tmp/1.sh
job 3 at 2014-07-24 15:25
# at now + 1 days -f /tmp/1.sh --当前时间+1天后执行/tmp/1.sh
job 4 at 2014-07-25 14:25
# at now + 1 months -f /tmp/1.sh --当前时间+1个月后执行/tmp/1.sh
job 5 at 2014-08-24 14:25
# at now + 1 years -f /tmp/1.sh --当前时间+1年后执行/tmp/1.sh
job 6 at 2015-07-24 14:25
at时间任务中的时间可以使用AM、PM表示
AM(上午时间)
PM(下午时间)
如:
# at 11.10 pm --今天下午11点10分执行
# at 9am tomorrow --明天上午9点执行
还有更多命令格式,请自行查阅at时间任务手册: # man at
# ls /var/spool/at/ --这个目录会看到有三个可执行文件, cat去看与at -c 任务号看到的结果一样
/etc/at.deny --at任务黑名单,这个文件控制哪些普通用户不可以使用at服务
at时间任务扩展指令“batch”
batch为,at命令的特殊版本,在执行的任务会占用大量资源的时候用,只在cpu需求低于cpu能力80%的时候使用
# batch 11:00
at> tuoch /testat/`date +%T`
一样使用 ctrl+d 结束
batch创建的任务也是通过atq查看,atrm删除
--------------------------------------------------------------------------
2.crond 周期性执行时间任务
作用:
如果我们想要在每一天的某一个时间段让系统自动完成我们想要完成的任务时即可使用!
使用方法:
直接在该服务的配置文件中进行修改即可
配置文件路径: /etc/crontab
# systemctl start crond --启动服务
# systemctl enable crond --开机启动服务
# vim /etc/crontab --周期性时间任务主配置文件
SHELL=/bin/bash 指定系统要使用哪个shell
PATH=/sbin:/bin:/usr/sbin:/usr/bin 指定系统执行命令的路径
MAILTO=root 执行信息将通过电子邮件发送给root用户
HOME=/ 指定在执行命令或者脚本时使用的主目录
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
分 时 日 月 周
*代表每分,每小时,每天。。。。。。
,代表分隔的时间,如1,3,7 1点3点7点
-代表连续的时间,如2-10 2到10点
*/2 代表每2隔两分钟、每2隔小时
例1:
# vim /etc/crontab
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
* * * * * root echo heihei > /dev/pts/5
时间 使用的用户名 需要执行的任务
表示每一分钟使用root用户执行一次 echo heihei > /dev/pts/5 命令
例3:
# vim /etc/crontab
* * * * * root sh /tmp/1.sh
表示每一分钟都去/tmp目录下将1.sh执行一次,保存退出后即可生效,无需重启服务
# vim /tmp/1.sh --脚本需要x执行权限,否则系统将无法自动执行
#!/bin/bash
echo haha > /dev/pts/5
# chmod 755 /tmp/*
crontab命令
crontab命令使用格式:
# crontab [-u user] 选项
命令常用选项:
-u 用户名。
-e 编辑crontab文件。
-l 列出crontab文件中的内容。
-r 删除crontab文件。
列出crontab文件
# crontab -l
编辑crontab文件
.
# crontab -e --每个用户都可以这样创建自己的时间任务
01 21 * * * /sbin/init 0 --因为用什么用户操作就是什么用户的身份,所以这里不用写用户身份
# crontab -u user1 -e --编辑user1用户的时间任务
你不使用crontab -e,直接去修改下面的目录里的对应的用户名的文件也是一样
/var/spool/cron/
删除crontab文件
# crontab -r
创建一个crontab文件
# touch /tmp/cronfile --手动创建该文件
# echo "* * * * * echo 1 > /dev/pts/2" >> /tmp/cronfile --想新建好的crontab文件追加内容
# crontab /tmp/cronfile --启用新建的crontab文件
crontab使用者权限文件
文件:/etc/cron.deny
说明:该文件中所列用户不允许使用crontab命令(黑名单)
文件:/etc/cron.allow
说明:该文件中所列用户允许使用crontab命令(白名单)
文件:/var/spool/cron/
说明:所有用户crontab文件存放的目录,以用户名命名
如:/var/spool/cron/user1 user1这个文件就是user1这个用户的crontab文件
1、ps命令查看系统中运行的进程信息。
ps [选项]
常用选项:
-a 显示终端上的所有进程,包括其他用户。
-e 显示系统中所有的进程信息(可用“-A”替代)。
-f 显示进程的所有信息。
-l 以长格式显示进程信息。
-u 显示面向用户的格式信息。
-x 显示没有控制终端的进程。
示例:
ps -aux|grep java
显示java 进程的所有状态。
ps命令输出字段名说明:
进程号(PID)、内存使用率(%MEM)、虚拟内存占用情况(VSZ)、物理内存占用情况(RSS)、登录的终端控制台(TTY,其中“?”表示未知)、当前进程状态(STSAT)、进程开始时间(START)、进程运行时间(TIMS)、进程名称(COMMAND)、执行进程的命令(CMD)
当前进程状态(STSAT)的几种形态:
R (TASK_RUNNING):可执行状态。
S (TASK_INTERRUPTIBLE):可中断睡眠状态。
D (TASK_UNINTERRUPTIBLE):不可中断睡眠状态。
T (TASK_STOPPED or TASK_TRACED):暂停或者跟踪状态
Z (TASK_DEAD-EXIT_ZOMBIE):退出状态,进程成为僵尸进程。
X (TASK_DEAD-EXIT_DEAD):退出状态,进程即将被销毁。
2、kill命令使用进程号来结束指定进程的运行。
-l 列出所有kill命令的选项
-2 中断(同ctrl+c)
-3 退出(同ctrl+\)
-15 终止
-9 强制终止(常用)
实例:
为了查看指定进程的进程号,可以使用管道操作和grep命令相结合的方式实现。
比如查看xinetd进程对应的进程号:
ps -e|grep xinted
例如,输出为:
1665 ? 00:00:00 xinted
从其输出信息中,可得知该进程的进程号为1665。若要结束改进程,则执行命令:
kill 1665
3、killall命令使用进程名来结束指定进程的运行。若系统存在同名的多个进程,则这些进程将全部结束运行。
kilall [-9] 进程名
选项“-9”用于强行结束指定进程的运行,属于非正常结束。
实例,若要结束xinetd进程的运行,则实现命令为:
kilall xinetd
linux中后台进程
用户输入shell命令后,空格加上“&”符号再按Enter就会启动一个后台进程。此时shell可以继续运行和处理其他程序命令。