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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 传感器低功耗设计_压力传感器

    传感器低功耗设计_压力传感器无线温度传感器是常见的传感器,广泛用于各种需要温度检测的场合。对于有线供电的传感器而言,可以实时监测来保证温度在限定范围内。而对于电池供电的温度传感器而言,如果过于频繁的读取传感器,则显然会消耗很多电

    2022年8月5日
    5
  • 使用playbook安装nginx和mysql

    使用playbook安装nginx和mysql

    2021年5月31日
    133
  • jsonObject转map_java 对象转map

    jsonObject转map_java 对象转map直接上代码,实现了对嵌套的对象进行转换。privateMap&amp;lt;String,Object&amp;gt;toMap(JSONObjectobject){Map&amp;lt;String,Object&amp;gt;map=newHashMap&amp;lt;String,Object&amp;gt;();Objectvalue;Stringkey;for(Iterator&amp;lt;?&

    2022年8月23日
    8
  • 热血传奇服务端源码(传奇类 手游源码)

    缘起因由在一个无所事事的周末下午,突然想起魔兽世界,官方的账号很久没有上了,里面的大小号现在连满级都不是。以前曾经搭过传奇和星际争霸战网的私服自娱自乐,也听说过魔兽世界有开源的服务端模拟,既然兴致来了就小小的研究一下。目前魔兽世界的私服比较流行的是MaNGOS和Trinity,二者都是模拟魔兽世界服务端。MaNGOS“号称”是一个研究型项目,目的是为了学习大规模的C++项目开发,有

    2022年4月16日
    119
  • Redis事务详解

    Redis事务详解若对事务概念不清楚 请先阅读 彻底理解 MySQL 四种事务隔离级别 这篇文章 链接如下 彻底理解 MySQL 四种事务隔离级别 YaoYong BigData 的博客 CSDN 博客转入正题 结合关系型数据库的事务来看看 Redis 中事务有什么不同 Redis 事务是指将多条命令加入队列 一次批量执行多条命令 每条命令会按顺序执行 事务执行过程中不会受客户端传入的命令请求影响 Redis 事务的相关命令如下 MULTI 标识一个事务的开启 即开启事务 EXEC 执行事务中的所有命令 即提

    2025年10月14日
    4
  • web界面设计(一)「建议收藏」

    web界面设计(一)「建议收藏」Web界面设计一指引客户1.令人心动的第一映像发现页面布局不是你选择页面布局,而是它选择你引导客户的视线利用对角线原则使用色彩来吸引用户 重点使用反色或者深色表示凸显个性可以使用符号来统一设计风格logo2.导航之道告诉软件应该做什么 设计菜单不应该基于对象,还是基于任务(动宾词)链接生来不平等标签抬起头来看路二学习1开

    2022年6月18日
    37

发表回复

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

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