说白了,就是一些例行工作的日常执行的排序程序

Linux  工作排程的种类:  at,cron

鸟叔说,atd并不是在所有版本都是开启的,但是centos7默认是开启的

[root@localhost ~]# systemctl restart atd  #重启atd服务
[root@localhost ~]# systemctl enable atd  #开机自运行
[root@localhost ~]# systemctl atd status  
Unknown operation 'atd'.
[root@localhost ~]# systemctl status atd  #查阅一下atd目前的状态
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled) #是否开机启动
Active: active (running) since 一 -- :: CST; 26s ago #active(running)是否正在运行中
Main PID: (atd)
CGroup: /system.slice/atd.service
└─ /usr/sbin/atd -f 8月 :: localhost.localdomain systemd[]: Started Job spooling tools.

利用at进行工作排程,工作排程就类似于任务。就需要将任务放到一个文本文件中,这个文本文件放在/var/spool/at目录中。这样就可以利用at来执行了

这就类似于自启动进程。在写黑客程序的时候,都会有一个默认自启动的服务,Linux这里就是类似于这么个东东,这就需要限制账户来执行Linux的at排程,以免黑客程序的入侵

利用/etc/at.allow与/etc/at.deny这两个文件来限制at的执行。执行原理如图

at语法

at指令的下达,会进入一个at shell的环境来操作。指令的下达就与环境变量有关,同时与当时的工作目录也有关联,因此使用绝对路径会比较保险一些。

利用at命令,将/root/.bashrc进行邮寄

[root@localhost ~]# at now + minutes
at> /bin/mail -s "testing at job" root < /root/.bashrc
at> <EOT>
job at Mon Aug ::
[root@localhost ~]# at -c
#!/bin/sh
# atrun uid= gid=
# mail root
umask
XDG_SESSION_ID=; export XDG_SESSION_ID
HOSTNAME=localhost.localdomain; export HOSTNAME
SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED
SHELL=/bin/bash; export SHELL
HISTSIZE=; export HISTSIZE
SSH_CLIENT=192.168.132.1\ \ ; export SSH_CLIENT
PERL5LIB=/root/perl5/lib/perl5:; export PERL5LIB
SELINUX_USE_CURRENT_RANGE=; export SELINUX_USE_CURRENT_RANGE
QTDIR=/usr/lib64/qt-3.3; export QTDIR
QTINC=/usr/lib64/qt-3.3/include; export QTINC
PERL_MB_OPT=--install_base\ /root/perl5; export PERL_MB_OPT
SSH_TTY=/dev/pts/; export SSH_TTY
QT_GRAPHICSSYSTEM_CHECKED=; export QT_GRAPHICSSYSTEM_CHECKED
USER=root; export USER
LS_COLORS=rs=:di=\;:ln=\;:mh=:pi=\;:so=\;:do=\;:bd=\;\;:cd=\;\;:or=\;\;:mi=\;\;\;:su=\;:sg=\;:ca=\;:tw=\;:ow=\;:st=\;:ex=\;:\*.tar=\;:\*.tgz=\;:\*.arc=\;:\*.arj=\;:\*.taz=\;:\*.lha=\;:\*.lz4=\;:\*.lzh=\;:\*.lzma=\;:\*.tlz=\;:\*.txz=\;:\*.tzo=\;:\*.t7z=\;:\*.zip=\;:\*.z=\;:\*.Z=\;:\*.dz=\;:\*.gz=\;:\*.lrz=\;:\*.lz=\;:\*.lzo=\;:\*.xz=\;:\*.bz2=\;:\*.bz=\;:\*.tbz=\;:\*.tbz2=\;:\*.tz=\;:\*.deb=\;:\*.rpm=\;:\*.jar=\;:\*.war=\;:\*.ear=\;:\*.sar=\;:\*.rar=\;:\*.alz=\;:\*.ace=\;:\*.zoo=\;:\*.cpio=\;:\*.7z=\;:\*.rz=\;:\*.cab=\;:\*.jpg=\;:\*.jpeg=\;:\*.gif=\;:\*.bmp=\;:\*.pbm=\;:\*.pgm=\;:\*.ppm=\;:\*.tga=\;:\*.xbm=\;:\*.xpm=\;:\*.tif=\;:\*.tiff=\;:\*.png=\;:\*.svg=\;:\*.svgz=\;:\*.mng=\;:\*.pcx=\;:\*.mov=\;:\*.mpg=\;:\*.mpeg=\;:\*.m2v=\;:\*.mkv=\;:\*.webm=\;:\*.ogm=\;:\*.mp4=\;:\*.m4v=\;:\*.mp4v=\;:\*.vob=\;:\*.qt=\;:\*.nuv=\;:\*.wmv=\;:\*.asf=\;:\*.rm=\;:\*.rmvb=\;:\*.flc=\;:\*.avi=\;:\*.fli=\;:\*.flv=\;:\*.gl=\;:\*.dl=\;:\*.xcf=\;:\*.xwd=\;:\*.yuv=\;:\*.cgm=\;:\*.emf=\;:\*.axv=\;:\*.anx=\;:\*.ogv=\;:\*.ogx=\;:\*.aac=\;:\*.au=\;:\*.flac=\;:\*.mid=\;:\*.midi=\;:\*.mka=\;:\*.mp3=\;:\*.mpc=\;:\*.ogg=\;:\*.ra=\;:\*.wav=\;:\*.axa=\;:\*.oga=\;:\*.spx=\;:\*.xspf=\;:; export LS_COLORS
MAIL=/var/spool/mail/root; export MAIL
PATH=/usr/lib64/qt-3.3/bin:/root/perl5/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin; export PATH
PWD=/root; export PWD
LANG=zh_CN.UTF-; export LANG
KDEDIRS=/usr; export KDEDIRS
SELINUX_LEVEL_REQUESTED=; export SELINUX_LEVEL_REQUESTED
HISTCONTROL=ignoredups; export HISTCONTROL
SHLVL=; export SHLVL
HOME=/root; export HOME
PERL_LOCAL_LIB_ROOT=:/root/perl5; export PERL_LOCAL_LIB_ROOT
LOGNAME=root; export LOGNAME
QTLIB=/usr/lib64/qt-3.3/lib; export QTLIB
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share; export XDG_DATA_DIRS
SSH_CONNECTION=192.168.132.1\ \ 192.168.132.16\ ; export SSH_CONNECTION
LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN
XDG_RUNTIME_DIR=/run/user/; export XDG_RUNTIME_DIR
QT_PLUGIN_PATH=/usr/lib64/kde4/plugins:/usr/lib/kde4/plugins; export QT_PLUGIN_PATH
PERL_MM_OPT=INSTALL_BASE=/root/perl5; export PERL_MM_OPT
OLDPWD=/srv; export OLDPWD
cd /root || {
echo 'Execution directory inaccessible' >&
exit
}
${SHELL:-/bin/sh} << 'marcinDELIMITER056cdc8c'
/bin/mail -s "testing at job" root < /root/.bashrc #这里就是我们的指令 marcinDELIMITER056cdc8c

batch:系统有空时才进行的后台任务

batch指令,会在cpu工作负载小于 0.8 的时候,才进行你所下达的任务指令。

鸟哥解释的很清楚,这个工作负载的概念

整分时间  概念

循环执行的例行性工作排程

我理解的就是,每隔多长时间执行一次的程式

上面三个图就是  日期格式  的范围

上面倒数第而张图,那个例子很清晰。。

上面几个日期函数的特殊字符,我觉得很有用。。。

这里有个例外。就是鸟哥在文中说的,cron这个命令,有的unix会把他放到内存里去执行,这样,需要重启一下cron服务,才能执行你的修改后的指令  systemctl restart crond   ,将服务重启一下

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root #发生错误时,发送的地址,默认是发送给root。可以发送到自己的邮箱地址。 # For details see man crontabs # Example of job definition:
# .---------------- minute ( - )
# | .------------- hour ( - )
# | | .---------- day of month ( - )
# | | | .------- month ( - ) OR jan,feb,mar,apr ...
# | | | | .---- day of week ( - ) (Sunday= or ) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

 将某个sh产生的信息丢入垃圾桶

xxxxx.sh > /dev/null 2>&1

后面的2>&1,不大理解为什么要加这个,所以查了一下

对于& 1 更准确的说应该是文件描述符 1,而1标识标准输出,stdout。
对于2 ,表示标准错误,stderr。
2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null(这里才是重点)

可以把/dev/null 可以看作"黑洞". 它等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到.

偶尔也可以把 & 在命令的最后加上,表示让程序后台执行。

为何2>&1要写在后面?

index.php task testOne >/dev/null 2>&1

我们可以理解为,左边是标准输出,好,现在标准输出直接输入到 /dev/null 中,而2>&1是将标准错误重定向到标准输出,所以当程序产生错误的时候,相当于错误流向左边,而左边依旧是输入到/dev/null中。

可以理解为,如果写在中间,那会把隔断标准输出指定输出的文件

将指令至于背景中,我理解的意思就是后台运行

 在指令后面加&

[root@localhost ~]# tar -zpcf /tmp/etc.tar.gz /etc &

例行性工作排程 (crontab)的更多相关文章

  1. 例行性工作排程 (crontab)

    1. 什么是例行性工作排程 1.1 Linux 工作排程的种类: at, crontab 1.2 Linux 上常见的例行性工作2. 仅运行一次的工作排程 2.1 atd 的启动与 at 运行的方式: ...

  2. 第十六章、例行性工作排程 (crontab)

    1. 什么是例行性工作排程 1.1 Linux 工作排程的种类: at, crontab 1.2 Linux 上常见的例行性工作 2. 仅运行一次的工作排程 2.1 atd 的启动与 at 运行的方式 ...

  3. linux备忘录-例行性工作排程 (crontab)

    例行性工作排程 例行性工作排程分为两类 at at是只执行一次就结束的指令安排.要想使用at,必须要有atd服务的支持. crontab crontab是每隔一段时间自动执行的指令安排.crontab ...

  4. 鸟哥私房菜基础篇:例行性工作排程 (crontab)习题

    猫宁!!! 参考:http://cn.linux.vbird.org/linux_basic/0430cron.php 1-今天假设我有一个命令程序,名称为: ping.sh 这个档名!我想要让系统每 ...

  5. Linux学习-循环执行的例行性工作排程

    循环执行的例行性工作排程则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的例行性工作,因此这个系统服务是默认启动的. 另外, 由于使用者自己也可以进行例行性工 ...

  6. Linux学习-什么是例行性工作排程

    那么 Linux 的例行性工作是如何进行排程的呢?所谓的排程就是将这些工作安排执行的流程之意! 咱们的 Linux 排程就是透过 crontab 与 at 这两个东西! Linux 工作排程的种类: ...

  7. 浅谈 linux 例行性工作 crontab (linux定时任务)

    定时任务大家都挺说过,就好比你手机上的闹钟,到了指定的时候就会响起. 今天在对redis缓存进行定时储存时又操作了一把,发现一些细节,写的不好.大家就将就看吧, 首先 简单介绍一下linux 例行性工 ...

  8. 第十五章 例行性工作(crontab)--循环执行的例行性工作调度 crontab(定时任务)

    循环执行的例行性工作调度 crontab(定时任务) 15.1 例行性工作调度 不考虑硬件与服务器的链接状态,Linux帮助提醒很多任务. Linux例行性工作是如何进行调度的? Linux调度就是通 ...

  9. linux例行性工作调度学习(一)

    Linux系统中有一种例行性工作(crontab)可以调度,是通过crontab和at来实现的. 这两种工作调度: 一种是例行性的,就是每隔一定的周期要来办的事项. 一种是突发性的,就是这次做完以后就 ...

随机推荐

  1. kubernetes容器集群部署Flannel网络

    Overlay Network:覆盖网络,在基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路连接起来. VXLAN:将源数据包封装到UDP中,并使用基础网络的IP/MAC作为外层报文头 ...

  2. springboot中xml配置之@ImportResource

    springboot中进行相关的配置往往有java配置和xml配置两种方式. 使用java的方式配置只需要使用@configuration注解即可,而使用xml的方式配置的话需要使用@ImportRe ...

  3. Java高频经典面试题(第一季)四:方法的参数传递机制

    考点? 方法的参数传递机制 String,包装类等对象的不可变性 方法的参数传递机制: ①形参是基本数据类型 传递数据值 ②实参是引用数据类型 传递地址值 特殊的类型:String.包装类等对象不可变 ...

  4. iframes

    iframes提供了一个简单的方式把一个网站的内容嵌入到另一个网站中.但我们需要慎重的使用iframe.iframe的创建比其它包括scripts和css的 DOM 元素的创建慢了 1-2 个数量级. ...

  5. 调用opencv的接口实现人脸检测(简单)

    import cv2 import matplotlib.pyplot as plt %matplotlib inline # 提取预训练的人脸检测模型,提前下载好的模型 face_cascade = ...

  6. jquery submit事件

    jquery submit 事件 $('#form').submit(function(){ if(true){ //do return true; }else{ //do return false; ...

  7. Antd Vue 问题集合

    1.table列宽问题 在滚动列时,如果要指定列宽,不要指定所有列宽,至少预留一列不执行列宽. 同时:scroll="{ x: width}", width的值要是所有列的宽度之和 ...

  8. POJ 3126 Prime Path (bfs+欧拉线性素数筛)

    Description The ministers of the cabinet were quite upset by the message from the Chief of Security ...

  9. 对象关系型数据库管理系统(PostgresQL )

    PostgresQL是   对象关系型数据库管理系统(ORDBMS).PostgreSQL支持大部分SQL标准并且提供了许多其他现代特性:复杂查询.外键.触发器.视图.事务完整性.MVCC.同样,Po ...

  10. vue中引入路由,如果你懒得写那么

    可以npm i vue-router --save,项目中自动给你写好,vuex也可以