我使用的是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+"\n")
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+"\n")
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-简洁版的更多相关文章

  1. linux中计划任务执行脚本

    我使用的是ubuntu14.4,所以在ubuntu中一切正常,在其他linux系统中应该都差不多. 1 计划任务,crontab命令选项:     -u指定一个用户,     -l列出某个用户的任务计 ...

  2. Linux中计划任务、周期性任务设置

    Linux中计划任务.周期性任务设置 计划任务:指在未来的特定时间里,执行一次某一特定任务.当然,如果同一任务需要在不同时间点执行执行两次.三次或多次,可以视为多个一次看待. 周期性任务:指某一任务需 ...

  3. ./ . 和#!/bin/bash 辨析Linux如何选择当前执行脚本的shell

    最近遇到一个有趣的问题,让我搞清楚Linux如何选择当前执行脚本的shell 执行cts的的 media stress test 需要安装 android-cts-media-1.0.zip 把这个文 ...

  4. [转帖]Linux /tmp目录下执行脚本失败提示Permission denied

    Linux /tmp目录下执行脚本失败提示Permission denied https://www.cnblogs.com/linyfeng/p/11087655.html 国产化的环境上 就有一个 ...

  5. Linux中kettle自动化部署脚本

    自己写的一个自动化在Linux中部署kettle的脚本,包括一些遇到的问题在脚本中都有涉及. kettle是官网最新版本pdi-ce-6.1.0.1-196.zip 目前最新版本下载地址:https: ...

  6. Linux下设置定期执行脚本

    下面针对的是非ubuntu环境,会在文章末尾介绍ubuntu的一些区别. 在Linux下,经常需要定期的执行一些脚本从而来实现一些功能. 在Linux下我们用crontab来实现定期的执行脚本这个功能 ...

  7. Linux开机启动时执行脚本的方法

    方法 1 – 使用 rc.local利用 /etc/ 中的 rc.local 文件在启动时执行脚本与命令.我们在文件中加上一行来执行脚本,这样每次启动系统时,都会执行该脚本.不过我们首先需要为 /et ...

  8. windows 建立任务执行计划 自动执行脚本

    对于windows服务器网站如果要定时执行脚本,则需要在windows控制面板里找到 管理工具,点击任务计划程序,创建任务填写任务名称 触发器里新建触发条件,设置间隔时间 在操作项,新建触发时需要做的 ...

  9. 【MYSQL】在脚本中使用变量-执行脚本时传参

    在shell脚本里可以定义变量,并在执行脚本时任意传参. #!/bin/bashdb_name=$1 #将第一个值赋给db_name变量sql_name=$2 #将第二个值赋给sql_name变量my ...

随机推荐

  1. TCP编程:系统出现 TIME_WAIT 原因及解决办法

    解决办法 打开 sysctl.conf 文件,修改以下几个参数: net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_ti ...

  2. oracle /*+ SYS_DL_CURSOR */ 这个hint

    之前一直都没使用过 /*+ SYS_DL_CURSOR */这个提示,今天下午在排查一个性能问题的时候,发现出问题的session在执行一个带了SYS_DL_CURSOR提示的语句,类似于: 经查这个 ...

  3. 辅助模块:udp_sweep

    辅助模块:udp_sweep 模块介绍 使用udp对指定IP地址主机进行udp扫描 实践过程 利用该模块填写目的IP来对目的IP地址进行扫描 从结果可以看到扫描结果显示扫描过程放出了13个探针,发现了 ...

  4. topcoder srm 505 div1

    problem1 link 设行数为$n$列数为$m$ 对于任意的两行$r_{1},r_{2}$以及任意的两列$c_{1},c_{2}$所确定的四个格子,只要知道其中的三个就能确定第四个,且必须要三个 ...

  5. 待续未完- 自己写后台内容管理程序 - 用tp框架 和 前台 jquery ui等写的

    在日常开发中,我们主要使用的还是 php 的 内部的 语言本身提供的函数/常量,系统内部数组等. 为了和后面的tp框架提供的 "系统函数.系统常量"相区别,把php提供的东西叫语言 ...

  6. CentOS7.2 问题收集 查看文件大小 查看端口

    1.在vmware中使用nat模式安装centos7.2,没有ifconfig命令? yum upgrade yum install net-tools 2.查看当前目录所有文件大小 [root@lo ...

  7. 深度学习课程笔记(七):模仿学习(imitation learning)

    深度学习课程笔记(七):模仿学习(imitation learning) 2017.12.10 本文所涉及到的 模仿学习,则是从给定的展示中进行学习.机器在这个过程中,也和环境进行交互,但是,并没有显 ...

  8. 通过sql语句修改表的结构

    1.修改表的列名 oracle: ALTER TABLE 表名 RENAME COLUMN 列名 TO 新列名sqlserver:exec sp_rename '[表名].[列名]','[表名].[新 ...

  9. Google advertiser 开发

    开发 相关知识: 单一归因与多重归因 当展示广告网络上发生一次展示时,您可按单一归因或多重归因记录对展示起到影响作用的条件. 单一归因 在使用单一归因时,系统只为指定的展示记录一个触发条件(如展示位置 ...

  10. Python 编码规范 PEP8

    1 Introduction Guido 的核心思想是:对于代码而言,相比于写,它更多是被用来读的.这个指导旨在使Python代码更易读,且具有更强的协调性. 2 A Foolish Consiste ...