{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

如何让shell脚本每天定时执行?

CoderDockCoderDock 回答0 收藏1
收藏问题

9条回答

Hancock_Xu

Hancock_Xu

回答于2022-06-27 17:10

这个非常简单,crontab命令就可以轻松实现,下面我简单介绍一下操作过程:

1.首先,新建需要定时执行的shell脚本,这里我为了方便说明问题,新建了一个打印当前时间的脚本date.sh,内容如下,非常简单,就是一行date命令,然后将输出重定向到一个date.txt文本中:

2.接着就是将这个date.sh脚本添加到定时任务中,直接运行“crontab -e”命令添加就行,如下,这里先以每分钟执行一次脚本为例,看定时任务能否正常执行,编辑“*/1 * * * * /root/date.sh”保存就行,如下:

至于这6个字段的含义,官方文档有详细说明,如下,分别代表分、时、天、月、星期和执行的命令,网上介绍资料也非常丰富,感兴趣的话,可以搜索一下:

3.最后,我们再查看一下输出文件date.txt和crontab日志,如下,说明添加的定时任务已经正常运行,这里再替换成你每天定时执行的时间,只需要修改第一、二个字段就行,例如,每天10:30执行,则编辑“30 10 * * * /root/date.sh”保存就行:

至此,我们就完成了每天定时执行shell脚本。总的来说,整个过程非常简单,只要你有一定的Linux基础,熟悉一下crontab命令,很快就能掌握的,网上也有相关资料和教程,介绍的非常详细,感兴趣的话,可以搜一下,希望以上分享的内容能对你有所帮助吧,也欢迎大家评论、留言进行补充。

评论0 赞同0
  •  加载中...
阿罗

阿罗

回答于2022-06-27 17:10

每天定时去执行shell脚本,说明你已经开始走向自动化运维之路了,再往后走就会开始制定标准化,有了标准化作为基础,可以继续下一步,平台化运维,最后就是智能化运维,回归正题,如何让shell脚本每天定时执行,在这里,我提供2种方法

方法一:crontab

无论你的系统是aix还是linux,都可以使用crontab去定时执行shell脚本,举个例子

* * * * * . /monitor/

disk.sh

> /monitor/

disk.sh.log

2>&1,这样配置,表示系统会每分钟调用一次

disk.sh

脚本。在这里要重点说明一下“* * * * *”,每个星星代表的含义。

第一个*代表分钟0~59

第二个*代表小时0~23(0表示子夜)

第三个*代表日1~31

第四个*代表月1~12

第五个*代表星期0~7(0和7表示星期天)

如果你想要

disk.sh

每天晚上22点30分执行,可以修改成这样

30 22 * * * . /monitor/disk.sh > /monitor/disk.sh.log 2>&1

方法二:Rundeck平台

用Rundeck平台,可以规模化的去管理每台主机的shell脚本的运行,crontab最小时间单位是分钟,而Rundeck平台可以精确到秒。

Rundeck是一个基于Java和Grails的开源的运维自动化工具,提供了Web管理界面进行操作,同时提供命令行工具和WebAPI的访问控制方式。他象Ansible之类的工具一样,Rundeck能够帮助开发和运维人员更好地管理各个节点。

总之,无论用crontab,还是用Rundeck平台,你的shell一定要标准化,不然后期会给你后期规模化运维带来很大的难度。

评论0 赞同0
  •  加载中...
jerryloveemily

jerryloveemily

回答于2022-06-27 17:10

crontab了解下,linux必学技能

评论0 赞同0
  •  加载中...
ssshooter

ssshooter

回答于2022-06-27 17:10

crontab可以让shell脚本每天定时执行,“crontab -e”进入编辑页面,“crontab -l ”查看当前的定时任务。

比如每天00:00执行脚本clean.sh:

0 0 * * * /bin/clean.sh

评论0 赞同0
  •  加载中...
Richard_Gao

Richard_Gao

回答于2022-06-27 17:10

linux系列的定时任务最简单的办法就是依赖系统提供的定时调度工具crontab

如何新建定时任务?

使用 crontab -e 命令,然后在打开的编辑器里新加一条记录类似下面这样的

前面的那段是时间相关的后面的是你要执行的命令

crontab 表达式

从左往右按顺序依次为

秒(0~59)----

分(0~59)

时(0~23)

日(0~31,但是你需要考虑你月的天数)

月(0~11)

周(0~6 0=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)

年(1970-2099)

其中每个元素可以是一个值(如6),一个连续区间(9-12),一个间隔时间(8-18/4)(/表示每隔4小时),一个列表(1,3,5),通配符。由于"月份中的日期"和"星期中的日期"这两个元素互斥的,必须要对其中一个设置?.


篇幅有限,如果还是不会,可以评论留言,我给你详细解释

评论0 赞同0
  •  加载中...
atinosun

atinosun

回答于2022-06-27 17:10

我自己的话是通过云帮手实现这一操作的,会比较方便一点。

首先是在服务器的管理面板里找到系统管理页面,点击计划任务,在下方点击添加计划任务

在计划任务的类型里选择shell脚本

然后就根据你自己的需求设定脚本名称、执行周期时间和上传脚本内容

设定完成后,回到操作列表点击执行就可以了

更多详情你可以去他家官网地址看看:https://www.cloudx.cn/download?utm_source=zhan-wukong

评论0 赞同0
  •  加载中...
ThinkSNS

ThinkSNS

回答于2022-06-27 17:10

执行什么命令?

如我们要执行一个命令同步时间,通常我们使用ntpdate这个命令具体如下:

[root@mpkwiki ~]# ntpdate

ntp.sjtu.edu.cn

#执行命令看看可行不

执行命令的周期

* * * * * 这个五个星分别代表:分、时、天、月、星期。

而 */5 * * * * /usr/sbin/ntpdate 10.93.0.33 >/dev/null 2>&1 代表的意思是每5分钟执行一次时间同步任务,并把结果输出到/dev/null 下面去。

怎么才能执行成功每天的计划任务

Linux使用crontab来执行每天的计划任务,在编写计划任务之前还是要确定你的命令是否能正常执行。我一般会使用which ntpdate 得到这个绝对路径下的命令。

接下来打开计划任务写下你命令代码,使用crontab -e。

最后使用刚刚命令写一个shell脚本备份一下MySQL数据库。

1,新建脚本/scripts/

backup_db.sh

,最好是一看就能知道是干嘛的那种。

2,给这个文件夹chmod +x 赋权限。

3,编辑脚本内容,大致如下;

#auto backup mysql

#tony 2019-03-01

#Define PATH

BAKDIR=/data/backup/mysql/`date +%Y-%m-%d`

MYSQLDB=database

MYSQLPW=Pa55w0rd

MYSQLUSR=root

#must use root user run scripts

if

[ $UID -ne 0 ];then

echo This script must use the root user ! ! !

sleep 2

exit 0

fi

#Define DIR and mkdir DIR

if

[ ! -d $BAKDIR ];then

mkdir -p $BAKDIR

else

echo This is $BAKDIR exists....

fi

#Use mysqldump backup mysql

/usr/bin/mysqldump -u$MYSQLUSR -p$MYSQLPW -B -F -R -x --master-data=2 $MYSQLDB|gzip >$BAKDIR/wikidatabase_db.sql.gz

echo "The mysql backup successfully "

4,执行命令测试[root@mpkwiki scripts]# which mysqldump

5,在计划任务里执行每天夜里12:00备份数据库

6,测试命令查询结果。

评论0 赞同0
  •  加载中...
caspar

caspar

回答于2022-06-27 17:10

不是crontab么

评论0 赞同0
  •  加载中...
smartlion

smartlion

回答于2022-06-27 17:10

Jenkins也可以

评论0 赞同0
  •  加载中...

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<