Ubuntu 定时执行脚本

Ubuntu 定时执行脚本一、关于crontabcron是一个Linux定时执行工具,可以在无需人工干预的情况下运行作业。在Ubuntu中,cron是被默认安装并启动的。二、例子直接上例子,来看看怎么用。需求:定时每天8点,自动执行保存在/root目录下hello.sh脚本1、方法很简单,只需编辑ect下crontab文件就行了,这个文件里存放的就是cron要执行的命令,以及定时执行的时间…

大家好,又见面了,我是你们的朋友全栈君。

一、关于crontab

cron是一个Linux定时执行工具,可以在无需人工干预的情况下运行作业。在Ubuntu中,cron是被默认安装并启动的。

 

二、例子

直接上例子,来看看怎么用。

需求:定时每天8点,自动执行保存在/root目录下hello.sh脚本

 

1、方法很简单,只需编辑ect下crontab文件就行了,这个文件里存放的就是cron要执行的命令,以及定时执行的时间

vim /etc/crontab

2、最后一行添加:

00 08   * * *   root    /root/hello.sh

 

三、解释

1、crontab定时任务语法如下:

minute   hour   day   month   week  user  command     #顺序:分 时 日 月 周 用户 命令

2、说明:

    minute: 表示分钟,可以是从 0 到 59 之间的任何整数。

    hour:表示小时,可以是从 0 到 23 之间的任何整数。

    day:表示日期,可以是从 1 到 31 之间的任何整数。

    month:表示月份,可以是从 1 到 12 之间的任何整数。

    week:表示星期几,可以是从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日。

    user:linux的用户身份,例如root,或者其他用户

    command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

 

3、在以上各个字段中,还可以使用以下特殊字符:

    星号(*):代表所有可能的值,例如 month 字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

    逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

    中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

    正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,\
例如*/10,如果用在 minute 字段,表示每十分钟执行一次。

四、补充

cron 服务的启动与停止,命令如下:

    1)service cron start  /*启动服务*/

    2)service cron stop /*关闭服务*/

    3)service cron restart /*重启服务*/

    4)service cron reload /*重新载入配置*/

    5)service cron status /*查看crond状态*/ 

 

五、兴趣拓展

写了一个每天8点从中国天气网爬取今天天气,传到ssh登录欢迎页面的小程序。这样每次ssh连接的时候就能看到当天的天气情况了。因为我在深圳所以用的深圳的例子来举,你可以自己去中国天气网找到自己城市的页面来爬。

1、shell脚本:/bin/tianqi.sh

#!/bin/bash
 
weatherDateRoot=http://www.weather.com.cn/weather1d/101280601.shtml  #中国天气网深圳
weatherDataFile=/root/weather.html
 
wget $weatherDateRoot -O $weatherDataFile > /dev/null 2>&1  #下载页面

result=$(cat $weatherDataFile | sed -n '/<input type="hidden" id="hidden_title" value/p')
subresult1=${result##*value=\"}     #处理网页,获取数据
subresult2=${subresult1%%\"*}       #这边涉及到字符串分割,不熟悉可以搜Shell截取字符串

echo printf "\"${subresult2} 深圳\"" >>/etc/update-motd.d/00-header 
#将数据写入欢迎页面文件,我这边还添了个深圳两个字

 2、crontab文件:

00 08   * * *   root    cp /etc/update-motd.d/00-header_bk /etc/update-motd.d/00-header
01 08   * * *   root    /bin/tianqi.sh

什么意思呢,第一条执行的是将备份的00-header_bk文件覆盖00-header文件,因为每次执行完tianqi.sh,都会在最后追加当日天气状况,如果不用备份覆盖,那么就会保留有之前的天气。因此,第一次启用这个程序之前需要先备份一下00-header,命名为00-header_bk。第二条就是执行天气获取脚本了。

 

好了,要讲的就这么多。

 

六、使用中用到的一些细节(下面的有用到的看看,不用的就不用看了)

1、crontab的运行目录是user的家目录

调用python脚本时,经常要用到引入某个自定义的包的操作,要引入这个包,需要先将该包的路径添加进环境变量(这边需要对python有所了解)。

例如:脚本路径是:/root/aaa/hello.py,你想在hello.py中引入/root/bbb/world.py,则你需要先在hello.py中将bbb包的路径添加进环境变量。

a、你可以在hello.py中使用绝对路径添加环境变量:

import sys
sys.path.insert(0, '/root/bbb/')

添加完环境变量,在hello.py中就可以直接引入world.py了

import world

如果没有添加环境变量,那么python就不知道去哪里引入world,就会报错。

 

b、使用相对路径添加环境变量:

下面重点来了:当使用相对路径时,引入的包的相对位置是相对于运行目录而言,而不是文件本身的相对位置!

解释一下,运行目录不是你python脚本文件的路径,而是你执行python命令的路径。比如你在/root路径下运行下面这个脚本,那么你的运行目录就是/root。如果你在/root/ccc/ddd路径下执行这个命令,那么你的运行目录就是/root/ccc/ddd。

python /root/aaa/hello.py

如果要在/root/ccc/ddd下运行,/root/bbb对于/root/ccc/ddd的相对路径是:

import sys
sys.path.insert(0, '../../bbb')  
#..代表父目录,所以..代表工作路径/root/ccc/ddd的父目录/root/ccc,
#../..代表父目录的父目录/root,../../bbb代表/root/bbb

添加完环境变量,在hello.py中也可以直接引入world.py了:

import world

 

重点!重点!下面这个问题!!

使用crontab定时执行python脚本时的运行目录是什么?

答:是你这个用户的家目录!,例如root用户那就是/root。爱玛呀,终于绕回来了!

 

别问我为啥写了一大段跟本文主题好像关系不是很大的内容。我就是因为这个问题,引入包时老是报错,搞了好半天!写下来给后来人借鉴,防止再踩这个坑。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160680.html原文链接:https://javaforall.net

(1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Mac OS 查看 ip 地址及 DHCP 各 addr 含义「建议收藏」

    Mac OS 查看 ip 地址及 DHCP 各 addr 含义

    2022年2月11日
    64
  • navicat15永久激活码【2021免费激活】

    (navicat15永久激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1STL5S9V8F-eyJsaWNlbnNlSWQi…

    2022年3月27日
    234
  • C#调用WebService实例和开发「建议收藏」

    C#调用WebService实例和开发「建议收藏」C#调用WebService实例和开发一、基本概念  WebService也叫XMLWebServiceWebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。简单的理解就是:webservice就是放在服务器上的函数,所…

    2022年7月21日
    17
  • 简单的激光干涉测距仪原理——为什么只能测量相对距离「建议收藏」

    简单的激光干涉测距仪原理——为什么只能测量相对距离「建议收藏」为什么要用激光来测量距离呢?这一切都是因为激光的波长很短,同频率的光波叠加会在波长级的尺度上产生周期性的变化,因此用激光测量距离时,精度是波长级别的,这也是为什么通常选用波长较短的激光进行测距。将同一光束分成两束,其中一束状态不变,另一束经物体反射后与第一束合并,以光电探测器进行探测。物体每移动半个波长,探测器探测到的信号就会出现一个极值,通过数极值的数量就可以知道物体移动了多少。…

    2022年5月22日
    57
  • tomcat 宕机原因排查

    tomcat 宕机原因排查一、近期突然发生的现象。可能原因:被恶意攻击或利用排查方式:1、运行tomcat并查看tomcat用户是否开启了陌生进程,同时看下tomcat相关目录、系统/tmp目录有没有陌生文件2、将该tomcat的访问转向一个不匹配的tomcat,然后通过查看错误日志,看是否有频繁…

    2022年7月26日
    42
  • iphone4s必装AppSync补丁教程使iOS5完全越狱[通俗易懂]

    iphone4s必装AppSync补丁教程使iOS5完全越狱[通俗易懂]iphone4s必装AppSync补丁教程使iOS5完全越狱2012-06-1719:44来源:未知一念之间我要评论大中小iPhone4等设备完美越狱终于发布,不过完美越狱完成后如果给iPhone上安装从iPhone中文网或者其他网站上下载ipa后缀格式的软件和游戏,还有一项重要的工作就是在CYIDIA上安装ipa补丁AppSync5.0+,下面就教大家怎样安装…

    2022年6月13日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号