linux中计划任务执行脚本
我使用的是ubuntu14.4,所以在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 =
with open("test",'a+') as fobj:
for i in range(*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 =
curdir = os.getcwd()
filename = os.path.join(curdir,"test")
with open('/home/pc/work/ENV/project/test','a+') as fobj:
for i in range(*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中计划任务执行脚本的更多相关文章
- Linux中计划任务执行脚本crontab-简洁版
我使用的是ubuntu16,所以在ubuntu中一切正常,在其他linux系统中应该都差不多. 1 计划任务,crontab命令选项: -u指定一个用户, -l列出某个用户的任务计划, ...
- Linux中计划任务、周期性任务设置
Linux中计划任务.周期性任务设置 计划任务:指在未来的特定时间里,执行一次某一特定任务.当然,如果同一任务需要在不同时间点执行执行两次.三次或多次,可以视为多个一次看待. 周期性任务:指某一任务需 ...
- ./ . 和#!/bin/bash 辨析Linux如何选择当前执行脚本的shell
最近遇到一个有趣的问题,让我搞清楚Linux如何选择当前执行脚本的shell 执行cts的的 media stress test 需要安装 android-cts-media-1.0.zip 把这个文 ...
- Linux中crontab无法执行java程序的问题
Linux中crontab无法执行java程序的问题 jdk环境变量配置问题:可以用全路径来解决: 竟然是kill -9之后,后面的脚本都不运行,这个还没有找到原因啊: 即便是系统级别的 ls 命令, ...
- [转帖]Linux /tmp目录下执行脚本失败提示Permission denied
Linux /tmp目录下执行脚本失败提示Permission denied https://www.cnblogs.com/linyfeng/p/11087655.html 国产化的环境上 就有一个 ...
- Linux中kettle自动化部署脚本
自己写的一个自动化在Linux中部署kettle的脚本,包括一些遇到的问题在脚本中都有涉及. kettle是官网最新版本pdi-ce-6.1.0.1-196.zip 目前最新版本下载地址:https: ...
- Linux下设置定期执行脚本
下面针对的是非ubuntu环境,会在文章末尾介绍ubuntu的一些区别. 在Linux下,经常需要定期的执行一些脚本从而来实现一些功能. 在Linux下我们用crontab来实现定期的执行脚本这个功能 ...
- Linux开机启动时执行脚本的方法
方法 1 – 使用 rc.local利用 /etc/ 中的 rc.local 文件在启动时执行脚本与命令.我们在文件中加上一行来执行脚本,这样每次启动系统时,都会执行该脚本.不过我们首先需要为 /et ...
- windows 建立任务执行计划 自动执行脚本
对于windows服务器网站如果要定时执行脚本,则需要在windows控制面板里找到 管理工具,点击任务计划程序,创建任务填写任务名称 触发器里新建触发条件,设置间隔时间 在操作项,新建触发时需要做的 ...
随机推荐
- cognos report上钻下钻报表处理方法(2)
在此之前已经说过了在报表本身单个维度上面的上钻与下钻,本次说的是传递参数追溯到其他报表.比如从部门追溯到部门每一位员工的数据分析, 如图:报表1 点击信托业务一总部跳转到下面的报表2,显示每一位执行经 ...
- spark shuffle过程分析
spark shuffle流程分析 回到ShuffleMapTask.runTask函数 如今回到ShuffleMapTask.runTask函数中: overridedef runTask(cont ...
- jmeter-The JVM should have exitted but did not
修改 jmeterengine.force.system.exit=true
- C语言打印字母金字塔(第一行是A 第二行是ABA ……)
#include <stdio.h> #include <stdlib.h> int main() { int line;//代表行数 int i; char letter,c ...
- 破解无线网络密码-BT3如何使用2
本教程只作学习和交流使用,任何其它商用与本人无关, 在开始教程之前, 首先需要用到几个软件,感兴趣的朋友看完贴子后可以去百度搜一下下载地址, 虚拟机: VMware Workstation 6.5 正 ...
- JDK5.0特性,使用ProcessBuilder执行本地命令
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.IO ...
- WPF使用DEV之TreeListControl---加入复选框
1.绑定的Class中加入一个Bool类型的属性 2. 该属性无需初始赋值,你执行就可以看到如图: Bool类型数据自己主动变成了复选框 watermark/2/text/aHR0cDovL2Js ...
- eclipse to avoid the message, disable the...
标题 CreateTime--2018年5月9日10:38:15 Author:Marydon 1.问题描述 2.问题解析 这是因为eclipse的智能提示超时引起的,将超时间调大即可,如:200 ...
- java 新创建的类要重写的方法
重写toString方法,可以控制println打印的结构. 如果需要往hashSet或者HashMap中存,需要重写hashCode和equals方法,因为hashSet执行添加,以对象为参数删除, ...
- Linux下MySQL链接被防火墙阻止
Linux下安装了MySQL,不能从其它机器访问 帐号已经授权从任意主机进行访问 vi /etc/sysconfig/iptables 在后面添加 -A RH-Firewall-1-INPUT -m ...