Linux 定时执行shell 脚本
Linux 定时执行shell 脚本
crontab 可以在指定的时间执行一个shell脚本以及执行一系列 Linux 命令。
定时执行shell脚本
- 简单给出执行 shell 脚本的步骤。
首先是编写一个测试脚本--test.sh
# 创建脚本 $ vim test.sh # 在脚本中做写入文件操作 date >> data.txt
修改脚本的权限,确保脚本有执行的权限
# 修改脚本的权限,确保脚本有执行的权限 chmod 777 test.sh
设置 crontab 定时任务
# 打开定时任务配置文件 crontab -e # 在配置文件中写入定时任务的操作, 这里就是指定每天12点定时执行脚本,并把执行脚本的日志写入文件 test.log 0 12 * * * sh test.sh > test.log # 保存退出,也就是 :wq
如果有错,linux 会在执行的时候发送一份邮件给你
cat /var/spool/mail/root
crontab 是运行在系统默认环境里,如果运行的脚本是执行 python 代码,即脚本的内容可能是:
python test.py
这里的 python 会是系统默认的 python 版本,而如果你是运行在 conda 环境里,那么这里就需要采用当前环境里 python 版本的执行文件的绝对路径,即先用以下命令查找当前 python 版本的执行文件位置:
$ which python # 假设输出的文件位置为: /root/anaconda3/py3/bin/python 这里输出的路径,直接替换脚本里的 python: /root/anaconda3/py3/bin/python test.py
如果还有conda 不同环境需要在脚本里面切环境:
source /root/anaconda3/bin/activate py38_test source /root/work/stc_llm/env.sh cd /root/work/stc_llm/benchmarks
这样才能保证运行不出错,否则可能因为版本问题出错;
crontab命令详解
常用命令
crontab -e //修改 crontab 文件,如果文件不存在会自动创建。 crontab -l //显示 crontab 文件。 crontab -r //删除 crontab 文件。 crontab -ir //删除 crontab 文件前提醒用户。 service crond status //查看crontab服务状态 service crond start //启动服务 service crond stop //关闭服务 service crond restart //重启服务 service crond reload //重新载入配置 #省略-u username表表示操作当前用户的 crontab -u username #编辑工作表([-u username]可以缺省) crontab -u username -e #列出工作表里的命令([-u username]可以缺省) crontab -u username -l #删除工作列表 crontab -u username -r # 开启服务,首次开启需要选择编辑器,按需选取即可 sudo service crontab restart # 继续输入以下指令进行工作表配置 crontab -u username -e
所以如果需要取消某个定时任务,就是可以删除在配置文件中的对应命令,即 crontab -e 打开文件,然后删除对应哪行的命令即可
基本格式
* * * * * command 分 时 日 月 周 命令
第1列表示分钟 00~59 每分钟用*或者 */1表示
第2列表示小时 00~23(0表示0点)
第3列表示日期 01~31
第4列表示月份 01~12
第5列标识号星期 0~6(0表示星期天)
第6列要运行的命令
此外每一列除了数字,还可以有这些符号,其含义如下所示:
* 代表任何时间,比如第一个 * 就代表一小时中的每分钟都执行 , 代表不连续的时间,比如 0 8,12,16 * * * 代表每天8,12,16点0分执行 - 代表连续的时间范围,比如0 5 * * 1-6 代表在周一到周六凌晨5点0分执行 */n 代表每个多久执行一次,比如*/10 * * * *代表每隔10分钟执行一次
示例
# 在凌晨00:10运行 10 0 * * * sh test.sh # 每个工作日23:59都进行备份作业。 59 23 * * 1,2,3,4,5 sh test.sh # 或者 59 23 * * 1-5 sh test.sh # 每分钟运行一次命令 */1 * * * * sh test.sh # 每个月的1号 14:10 运行 10 14 1 * * sh test.sh # 每10分钟定时请求一个地址 0 */10 * * * /usr/bin/curl http://www.aaa.com/index.php
注意,一般最好不要同时采用几号和每周几,可能会出现混淆;
查看crontab的日志记录
1. linux 看 /var/log/cron这个文件就可以,可以用tail -f /var/log/cron观察(不能用cat查看) 2. unix 在 /var/spool/cron/tmp文件中,有croutXXX001864的tmp文件,tail 这些文件就可以看到正在执行的任务了。 3. mail任务 在 /var/spool/mail/root 文件中,有crontab执行日志的记录,用tail -f /var/spool/mail/root 即可查看最近的crontab执行情况。
另外 ubuntu启动各项功能配置+开机自动启动:http://blog.csdn.net/my_worlddream/article/details/50557771
https://dunwu.github.io/linux-tutorial/linux/ops/crontab.html#crontab-实例
https://worktile.com/kb/ask/1177451.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY