我是靠谱客的博主 炙热皮皮虾,最近开发中收集的这篇文章主要介绍Linux crontab命令定时运行脚本, python程序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简介

配置cron有两种方式,一种是直接编辑 /etc/crontab 文件; 一种是使用 crontab -e命令(推荐使用这种方式)。

1. 配置crontab文件

Linux下的定时执行主要是使用crontab文件中加入定制计划来执行,

查看/etc/crontab文件:

$ cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

配置crontab文件:

$ vi /etc/crontab

添加命令示例:

# 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

2. 使用crontab -e命令

crontab命令:

crontab –e     //修改 crontab 文件,如果文件不存在会自动创建。 
crontab –l      //显示 crontab 文件。 
crontab -r      //删除 crontab 文件。
crontab -ir     //删除 crontab 文件前提醒用户。

service crond status     //查看crontab服务状态
service crond start     //启动服务 
service crond stop     //关闭服务 
service crond restart     //重启服务 
service crond reload     //重新载入配置

基本格式:

*  *  *  *  *  command
分  时  日  月  周   命令

(1)通过 crontab -e 创建用户的crontab文件

$ crontab -e

如果第一次创建,会是空白文件;以后会打开上次创建的文件。

可以在文件头部写入:

SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
# Order of crontab fields
# minute	hour	mday	month	wday	command

(2)添加运行的命令

比如,定时8点运行/data/schdule.sh 脚本,对文件/etc/crontab进行编辑,添加相应的运行代码:

0 8 * * * /data/schdule.sh

如果希望记录脚本的输出日志:

这个功能/etc/crontab是没有的.

0 8 * * * /data/schdule.sh > /data/schdule.log

如果定时运行python程序,只需要在我们的/data/schdule.sh 脚本里边写上需要运行的python代码:

python send_message_everyday.py

(3)管理crontab文件

查看已有的命令:

% crontab -l
0	14	*	*	*	/usr/home/dru/bin/mycustomscript.sh

删除所有的cron jobs:

% crontab -r
remove crontab for dru? y

2>&1含义

0 1 * * * /data/test.sh > /dev/null 2>&1

> 代表重定向;

/dev/null 代表空设备文件,相当于回收站。

1 表示stdout标准输出,系统默认值是1,所以">/dev/null" 等同于 “1>/dev/null

2 表示stderr标准错误输出;

& 表示等同于的意思,2>&1表示将标准错误输出重定向到标准输出stdout

#整句的意思就是标准输出重定向到空设备文件,也就是不输出任何信息到终端,标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

3. /etc/crontab 和crontab -e的区别

(1)/etc/crontab 是系统范围的crontab, 它的格式是:

# m h dom mon dow user      command
*   *  *   *   *  someuser  echo 'foo'

(2)crontab -e 是针对每一个用户,但可以用 crontab -e -u <username> 指定某个用户。

对每个用户的crontab, 是没有 user 选项的:

# m h  dom mon dow  command
*   *   *   *   *   echo 'foo'

4. 查看定时任务状态

如果认为执行不成功,可以查看定时任务状态:

service crond status

(centos7 版本:systemctl status crond.service)

Redirecting to /bin/systemctl status  crond.service
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2020-07-01 22:42:35 CST; 4 months 29 days ago
 Main PID: 19746 (crond)
   CGroup: /system.slice/crond.service
           └─19746 /usr/sbin/crond -n

Nov 29 23:24:01 bk-1.localdomain crond[19746]: (*system*) RELOAD (/etc/crontab)
Nov 29 23:27:01 bk-1.localdomain crond[19746]: (*system*) RELOAD (/etc/crontab)
Nov 30 04:00:01 bk-1.localdomain crond[19746]: (/data/project/run_job.sh) ERROR (getpwnam() failed)
Nov 30 09:59:01 bk-1.localdomain crond[19746]: (*system*) RELOAD (/etc/crontab)

重启定时任务: (/etc/crontab会一分钟重新读取,一般无需重启)

service crond restart

(centos7 版本systemctl restart crond.service)


参考:

  1. Linux 定时运行脚本、命令;
  2. Linux 定时执行shell脚本命令之crontab;
  3. Difference between /etc/crontab and “crontab -e” Ask Question;
  4. 排查/etc/crontab不执行的过程;
  5. /dev/null 2>&1 详解

最后

以上就是炙热皮皮虾为你收集整理的Linux crontab命令定时运行脚本, python程序的全部内容,希望文章能够帮你解决Linux crontab命令定时运行脚本, python程序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部