在Linux系统下 请制定一个cron任务 每月的一日凌晨两点关闭服务器并给出提示信息:FOR maintance!

在Linux系统下 请制定一个cron任务 每月的一日凌晨两点关闭服务器并给出提示信息:FOR maintance!,第1张

0 2 1 echo 'FOR maintance!'
前五个参数分别是:分、时、日、月、星期
后面是执行命令:echo 'FOR maintance!'
补充:
那你可以写一个shell脚本,脚本里面写两个命令:
echo 'FOR maintance!'
halt
cron里就执行这个脚本就行了。改一下,halt应该最后才 *** 作

常用选项:
-l 查看作业队列,相当于atq
-f 从某个指定文件文件中读取作业任务,不通过交互式输入。
-d 删除指定的作业任务,相当于atrm。
-c 查看指定作业具体内容。
-q QUEUE指明队列。
TIME时间格式有:
HH:MM 小时:分钟 例如04:00
HH:MM YYYY-MM-DD 小时:分钟 年-月-日 例如15:00 2017-11-25
HH:MM[am|pm] [Month] [Date] 例如:04pm July 30
HH:MM[am|pm] + number [minutes|hours|days|weeks]在某个时间点再加几个时间后执行
例如:now + 5minutes 5分钟后执行
04pm + days三天后下午4点执行
[root@dxlcentOS ~]# at 15:55 2017-11-25 在15点55分执行:切换到tmp目录,执行ls命令
at> cd /tmp
at> ls
at> <EOT>
job 3 at Sat Nov 25 15:55:00 2017
注意:输入结束后按ctrl+d,任务输入结束at> <EOT>,执行结果屏幕不会显示,会以邮件形式发送到邮箱。要是没有mail命令,进行yum -y install mailx安装。
执行周期性任务要确保crond守护进程在运行。
执行pstree,要是crond运行起来可以看到。
或者执行:~]# systemctl status crond (centos7)
Active: active (running)
centos6:~]# service crond status
is running
有时候为了安全起见,可以将不允许某些用户执行周期性任务的用户名添加到/etc/crondeny文件里面即可。
cron任务分类:分系统cron任务和用户cron任务
总结:1cron周期任务最小时间单位是分钟。
2定义COMMAND时,如果命令需要用到%,需要对其转义;但放置于单引号中的%不用转义亦可。
3某任务在指定的时间因关机未能执行,下次开机不会自动执行。
4当修改之前定好的任务或新增循环任务时最好执行一下systemctl restart crond。
5如果是系统管理使用的循环任务最好写入/etc/crontab。
6避免系统资源分配不均,周与日月不可以同时并存。
cron循环任务设定后,要是服务器因意外关机,那么在停机期间,cron设定的循环任务是不会运行的,当服务器开机后,也不会执行过去到达时间点的循环任务,只能等待下个时间点到来才执行。要想重新执行,anacron就可以解决这个问题。
anacron 是一个程序不是一个服务,当centos进入crontab排程时,anacron 会主动每一小时运行一次。

我理解你的意思是:你需要在关闭的时候有提示信息
crontab -e
0 0 1 shutdown -h 5 -k For ME
到时每个linux用户都能收到系统关机的信息,并不重启

    昨天在Linux做个进程守护脚本时发生了几个小问题,实属不该。先总结如下,在以后的实践中一个避免这样的问题。同时针对cron,再次深入学习实践。

1、换行符问题

    脚本与运行报错“:badinterpreter:Nosuchfileordirectory”。

    脚本在windows下编辑,有几条命令是直接复制过来使用的,虽然vs code可以在右下角选择行尾序列,但是在实际运行时还是提示无法识别/r,每一行都多了个^M  。

  \r\n: Dos和Windows采用回车+换行(CR+LF)表示下一行,即^M$

\n: 而UNIX/Linux采用换行符(LF)表示下一行

\r: 苹果机(MAC OS系统)则采用回车符(CR)表示下一行 

2、= 赋值问题

    笔者在使用if条件表达式时,知道条件要放在方括号之间,并且要有空格。误以为变量赋值=也要空格,运行时发现变量无法识=识别,后来才知道变量赋值=不能有空格。

3、cron定时任务的环境变量问题

    用户的crontab定时任务不会使用默认的变量, 需要写全路径,包括crontab调用的脚本里面 。而系统cron定时任务是由定义环境变量的。MAILTO是表示例行性命令发生错误时,会将错误讯息邮件传给root,服务器中关闭postfix,导致邮件发送不成功,全部小文件堆积在/var/spool/postfix/maildrop/里面。

4、cron中执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了/var/spool/mail目录下的那些文件,日积月累可能撑破磁盘。在cron中命令后面加上 >/dev/null 2>&1 来不输出。

5、crontab中的指令需要root,配置/etc/sudoers文件来保证sudo可用,其实可用使用系统任务计划,指定root来执行即可。

     最后,笔者专注于使用cron,现在在以前的文章(树莓派上测试)- Linux crontab定时任务详细分解 的基础上,在腾讯云服务器centos上补充以下cron的知识。

用户计划任务 :

1、crond时cron的守护进程,crond是由多个配置文件和系统范围内的文件控制的,每个用户对应一个配置文件。crond守护进程是cronie软件的一部分。用户的配置文件在/var/spool/cron/username。

2、crontab命令

    crontab -e 编辑当前用户的定时计划

    crontab -l 列出当前用户的定时计划

     crontab -r 删除当前用户的所有定时计划

       crontab filename 删除当前用户的所有定时计划,并从filename中读取作业,如果未指定任何文件,则使用stdin 。

3、格式,另外/x表示间隔x个周期。 用户计划任务没有user-name字段!

  /7  9-16    jul 5 command表示7月的每周五的上午9到下午5点 间,每七分钟执行一次。

系统计划任务:

1、系统cron不是由crontab来执行的,而是在一组配置文件中定义的,配置文件多了一个字段-用户字段,指定作业在那个用户下运行。

2、系统计划任务储存在/etc/crontab、 /etc/crond/  以及/etc/cron ,/etc/crontab的语法规则参照上面的图。 /etc/crond/时软件产生的一些更新任务,一般不在里面做 *** 作。

3、预定义作业,crondaily、cronhourly、cronmonthly、cronweekly下面储存的是可执行脚本。

    /etc/cronhourly/脚本是使用runparts命令从/etc/crond/0hourly中定义的,表示每小时的第一分钟将 /etc/cronhourly/下面的脚本全部执行。

    /etc/crondaily、 /etc/cronmonthly、 /etc/cronweekly也是使用runparts命令,但是是从/etc/anacrontab中执行的。

4、/etc/anacrontab语法规则

       START_HOURS_RANGE=3-22,表示Anacron jobs will start between 3am and 10pm

       RANDOM_DELAY=45,The RANDOM_DELAY variable denotes the maximum number of minutes that will be added to the delay in minutes variable  which  is specified for each job

     上图中,对于 /etc/crondaily,那么delay 会是 5 minutes + RANDOM_DELAY  。

    接下来就是4个重要的参数:

      period in days ,delay in minutes ,job-identifier,   command

    The period in days variable表示执行周期,每多少天运行一次该作业。

    delay in minutes:上面提到的执行的延时,启动作业前,crond等待的时间。

    job-identifier:标识作业的唯一名称,用做日志记录。是/var/spool/anacron中文件的名称,检查该作业是否已运行,/etc/anacrontab启动作业时,会更新此文件的时间戳,检查作业上次运行的时间。anacron 会分析现在的时间与时间记录文件所记载的上次执行 anacron 的时间,将两者进行比较,如果两个时间的差值超过 anacron 的指定时间差值(一般是 1 天、7 天和一个月),就说明有定时任务没有执行,这时 anacron 会介入并执行这个漏掉的定时任务,从而保证在关机时没有执行的定时任务不会被漏掉。这也是为什么/etc/cron{daily,weekly,monthly} 目录中的定时任务只会被 anacron 调用,而 /etc/cronhourly/被cron调用 。

     command:执行命令可以是普通命令或者脚本。

5、cron的访问控制

    /etc/cronallow、    /etc/crondeny ,以决定哪些用户可以使用调度服务。

    如果只有crondeny文件,而cronallow文件不存在,则除了黑名单之外的所有用户都可以使用;

    如果只有cronallow文件存在,而crondeny文件不存在时,则只有白名单用户才可以使用,,包括root。

    如果两个文件都存在,则忽略cronallow文件。

    如果两个文件都不存在,每个用户都可以访问。

一、搭建时间服务器
1、在一台linux服务器安装ntp server
2、修改ntpconf配置文件
vi /etc/ntpconf
restrict default nomodify
(允许任何IP的客户机都可以进行时间同步,如果是只允许某个网段的客户机进行时间同步可以这样写restrict 1058260 mask 2552552550 nomodify)
3、以守护进程启动ntpd
#/etc/rcd/initd/ntpd -c /etc/ntpconf -p /tmp/ntpdpid
#/etc/rcd/initd/ntpd start
二、配置时间同步客户机
ntpdate 101281425
hwclock -w
使用cron 定时同步
vi /var/spool/cron/root(或crontab -e)
增加一行,在每天的1点10分、9点10分、17点10分与时间同步服务器进行同步并写入BIOS
10 1 ,9,17 root /usr/sbin/ntpdate 101281425; /sbin/hwclock -w


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13459477.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-11
下一篇 2023-08-11

发表评论

登录后才能评论

评论列表(0条)

保存