Linux中计划任务执行脚本crontab-简洁版

摘要:
Crontab命令选项:-e编辑用户的任务。2.cron文件语法:0表示一行对应周日的一个任务。)您可以使用cronab-e命令在/var/spool/cron下编辑相应用户的cron文件。您可以看到测试文件每秒更新一次。

我使用的是ubuntu16,所以在ubuntu中一切正常,在其他linux系统中应该都差不多。

  1 计划任务,crontab命令选项:
     -u指定一个用户,
     -l列出某个用户的任务计划,
     -r删除某个用户的任务,
     -e编辑某个用户的任务

  2 cron文件语法:

    分     小时   日       月       星期     命令
         0-59   0-23   1-31   1-12     0-6     command     (取值范围,0表示周日一般一行对应一个任务)

  可用crontab -e命令来编辑,编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件
具体格式如下:
       Minute Hour Day Month Dayofweek   command
       分钟     小时   天     月       天每星期       命令
每个字段代表的含义如下:
     Minute             每个小时的第几分钟执行该任务
     Hour               每天的第几个小时执行该任务
     Day                 每月的第几天执行该任务
     Month             每年的第几个月执行该任务
     DayOfWeek     每周的第几天执行该任务
     Command       指定要执行的程序

  

  记住几个特殊符号的含义:

        "*"代表取值范围内的数字,

        "/"代表"每",

        "-"代表从某个数字到某个数字,

        ","分开几个离散的数字

  3 新增一个计划任务

    crontab -e 然后添加相应的任务,wq存盘退出。

  4 查看计划任务

    查看调度任务
         crontab -l //列出当前的所有调度任务
         crontab -l -u jp   //列出用户jp的所有调度任务

  5 例子1,增加一个计划任务

  * * * * * date > test

  6 重启cron服务

    service cron restart

  注意:每次修改完crontab后,需要重启服务。

  可以看到test文件每秒钟会进行一次更新。

  

  例子2,写一个python脚本,定时执行

  test2.py文件代码如下

复制代码
#!/usr/bin/python
import time

def fun1():
        lastsec = 4
        with open("test",'a+') as fobj:
                for i in range(2*lastsec):
                        tm = time.strftime("%Y-%m-%d %H:%M:%S")
                        fobj.write(tm+"
")
                        time.sleep(0.5)

def test():
        fun1()
if __name__=="__main__":
        test()
复制代码

  要想要执行该文件,需要添加可执行权限

  chomd +x test2.py

  新增一个计划任务

  */2 * * * * /usr/bin/python /home/pc/work/ENV/project/test2.py

  注意:为了安全起见所有的路径都需要是绝对路径。

  但是没有执行,后来上网查找资料,需要查看日志,找了半天没有,原来是ubuntu系统默认没有打开日志。所以要先打开日志,日志文件在/var/log/cron.log

  方法:

    1) 修改rsyslog文件,将/etc/rsyslog.d/50-default.conf 文件中的#cron.*前的#删掉;
    2) 重启rsyslog服务service rsyslog restart
    3) 重启cron服务service cron restart

  这样就可以看到日志了。

8月 27 15:42:01 pc-virtual-machine CRON[10196]: pam_unix(cron:session): session opened for user pc by (uid=0)
8月 27 15:42:01 pc-virtual-machine CRON[10197]: (pc) CMD (/usr/bin/python /home/pc/work/ENV/project/test2.py)

可以看到计划任务却是执行了。但是为什么没有输出文件test呢?

  然后自己手动执行计划任务中的命令,/usr/bin/python /home/pc/work/ENV/project/test2.py

 

pc@pc-virtual-machine:/var/spool$ /usr/bin/python /home/pc/work/ENV/project/test2.py
Traceback (most recent call last):
File "/home/pc/work/ENV/project/test2.py", line 18, in <module>
test()
File "/home/pc/work/ENV/project/test2.py", line 16, in test
fun1()
File "/home/pc/work/ENV/project/test2.py", line 9, in fun1
with open('test','a+') as fobj:
IOError: [Errno 13] Permission denied: 'test'

给我报错了,仔细一看,原来是自己的脚本有问题,输出的 test文件应该是绝对路径,不应该是相对路径,可能是程序不是在脚本所在的文件夹力执行,所以有可能会产生权限问题。

所以,经过修改后,test2.py文件如下

复制代码
#!/usr/bin/python
import time
import os

def fun1():
        lastsec = 4
    curdir = os.getcwd()
    filename = os.path.join(curdir,"test")
        with open('/home/pc/work/ENV/project/test','a+') as fobj:
                for i in range(2*lastsec):
                        tm = time.strftime("%Y-%m-%d %H:%M:%S")
                        fobj.write(tm+"
")
                        time.sleep(0.5)

def test():
        fun1()
if __name__=="__main__":
        test()
复制代码

然后重启cron服务。

ls
startpy.sh test test2.py

可以看到有了输出。

more test

2016-08-27 16:52:01
2016-08-27 16:52:02
2016-08-27 16:52:02
2016-08-27 16:52:03
2016-08-27 16:52:03
2016-08-27 16:52:04
2016-08-27 16:52:04
2016-08-27 16:52:05

大功告成!!!

linux中将一个脚本文件作为一个计划任务小结,以python脚本为例:

  1 创建脚本文件test.py,在文件开头需要加上下面一行

  #!/usr/bin/python

  上面这行的作用是说明使用那个解释器来执行该文件,如果不知道python解释器在哪,可以使用命令which python来查看

  2 给该文件添加可执行的权限

  chmod  +x  test.py

  注意:在脚本文件中如果涉及文件操作,请使用绝对路径,我就是在这上面掉坑里了。

  3 添加计划任务

  crontab -e

  在文件中追加一行,*/2 * * * * /usr/bin/python /home/pc/work/ENV/project/test.py

  保存退出,:wq

  4 重启cron服务

  service cron restart

  结束

正常情况下应该是可以运行的,如果有问题,可以按照如下步骤找到问题所在

  查看cron的log,在/var/log/cron.log,想ubuntu默认情况下是没有开启的,所以要自己手动开启log

  如果有log输出,说明计划任务试运行正常的,那就有可能是你配置有问题,自己手动运行一下计划任务中的cmd命令,像我开始那样就是由于脚本本身存在问题(不要使用文件的相对目录),如果成功,则说明脚本的环境变量有问题,具体原因就需要查看crontab发送的错误邮件了。

免责声明:文章转载自《Linux中计划任务执行脚本crontab-简洁版》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇FOFANodeJS + Socket.IO 最终版下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Qt动态库静态库的创建、使用、多级库依赖、动态库改成静态库等详细说明

本文描述的是windows系统下,通过qtcreator在pro文件中添加动态库与静态库的方法: 1、添加动态库(直接添加动态库文件.dll,非子项目) 通过qtcreator创建动态库的方法就不在此处赘述了。 唯一值得强调的是动态库与静态库的创建在pro文件中配置的区别在于静态库多了 CONFIG += staticlib ,如下图所示(稍安勿躁,以下示...

postgres数据库表空间收缩之pg_squeeze,pg_repack

postgres数据库表空间收缩之pg_squeeze,pg_repack 目录 postgres数据库表空间收缩之pg_squeeze,pg_repack pg_squeeze1.2 原理 优点 安装 使用 pgstattuple 临时处理 监控方式 注意事项 squeeze1.2和低版本的区别 pg_repack 原理 安装 使用方法 测...

Qt之生成Window资源文件(.rc 文件)

简述 qmake 可以随意地自动生成一个适当填充的 Windows 资源文件。本节主要讲解如何用 qmake 处理一个 Windows 资源文件,并将其链接到一个可执行应用程序(EXE)或动态链接库(DLL)。 简述 详细说明 生成 rc 文件 系统变量 windres 示例 更多参考 详细说明 一个链接的 Windows 资源文件包含许多元素,可以由...

PowerShell初探

Windows PowerShell是一种命令行外壳程序和脚本环境,它内置在每个受支持的Windows版本中(Windows 7/Windows 2008 R2和更高版本),使命令行用户和脚本编写者可以利用.NET Framework的强大功能。一旦攻击者可以在一台计算机上运行代码,他们就会下载Powershell脚本文件(.ps1)到磁盘中执行,甚至无需...

js调试工具Console命令详解——转

一、显示信息的命令 <!DOCTYPE html> <html> <head> <title>常用console命令</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> &...

Golang学习笔记(一)-Go语言环境安装以及运行代码

Linux安装 Golang官网下载地址:https://golang.org/dl/ 1、下载安装包 2、解压至 /usr/local 目录 tar -C /usr/local -zxvf go1.11.5.linux-amd64.tar.gz 3、添加 /usr/loacl/go/bin 目录到PATH变量中。添加到/ etc/profile 或 $H...