CentOS之——crontab执行计划任务

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/79566313

需求是每天的23点59分执行定时任务。

1、安装

yum install crontabs
2、服务相关
/sbin/service crond status       #查看任务状态
/sbin/service crond start        #启动服务
/sbin/service crond stop         #关闭服务
/sbin/service crond restart      #重启服务
/sbin/service crond reload       #重新载入配置
3、查看计划任务。基本命令行参数建议使用crontab --help查看,man crontab太繁琐。
crontab -l                 #查看当前用户计划任务
crontab -u username -l        #查看userx用户的计划任务
4、查看任务执行日志。
5、/etc/crontab文件里面存放系统计划任务,/var/spool/cron/目录里面按用户存放计划任务
6、编辑/etc/crontab配置计划任务
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
 
# For details see man 4 crontabs
 
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * [user-name] command to be executed
 
59  23  *  *  *  root /home/script/test.sh
/var/spool/cron/目录里面的计划任务文件内容格式与上面雷同。区别是,/var/spool/cron/必须指定用户;/etc/crontab是系统计划任务,可以不指定用户。
7、这里遇到一个问题,调用jar包失败。原因是crontab的环境变量问题,可参考 Linux中crontab的坑爹环境变量问题。walker只在脚本中加了下面一句导入环境变量:
source /etc/profile
这时如果还是手动执行脚本OK,但是crontab死活不执行。可以尝试在crontab中直接引入环境变量解决问题。如:
59 23 * * * . /etc/profile;/bin/sh /home/script/test.sh

### 如何配置 `crontab` 定时执行脚本 #### 1. 确认 `crond` 服务已安装并运行 在 CentOS 7 或其他基于 Red Hat 的系统中,可以通过以下命令确认 `crond` 是否已安装: ```bash yum list installed | grep "crond" ``` 如果未安装,则可以使用以下命令进行安装: ```bash yum install cronie -y ``` 接着,检查 `crond` 服务的状态以确保其正在运行: ```bash systemctl status crond ``` 如果没有运行,可以启动该服务: ```bash systemctl start crond ``` 为了使服务开机自启,还可以启用它: ```bash systemctl enable crond ``` 以上操作用于初始化系统的定时任务调度器[^1]。 --- #### 2. 编写待执行的脚本 创建一个需要定期执行的任务脚本。例如,在 `/usr/local/bin/example.sh` 中编写如下内容: ```bash #!/bin/bash echo "$(date): This is a test log entry." >> /var/log/cron_test.log ``` 此脚本会向 `/var/log/cron_test.log` 文件追加当前时间戳的日志条目。 保存后赋予脚本可执行权限: ```bash chmod +x /usr/local/bin/example.sh ``` --- #### 3. 配置 `crontab` 定时任务 编辑用户的 `crontab` 文件来添加新的定时任务: ```bash crontab -e ``` 在此文件中按照特定语法输入要执行的任务。例如,让上述脚本每小时执行一次: ``` 0 * * * * /usr/local/bin/example.sh ``` 这里的字段含义依次为:分钟、小时、日期、月份、星期几以及最后的实际命令[^3]。 --- #### 4. 处理可能的环境变量问题 有时即使手动测试脚本能成功运行,但在 `crontab` 下却失败。这通常是因为 `cron` 运行环境中缺少某些必要的环境变量(如 `$PATH`)。解决方法是在脚本顶部显式声明所需的路径或其他依赖项。例如修改脚本头部为: ```bash #!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin echo "$(date): This is a test log entry with explicit path settings." >> /var/log/cron_test.log ``` 或者直接在 `crontab` 条目前定义这些变量: ``` SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 0 * * * * /usr/local/bin/example.sh ``` 这样能有效避免因环境差异引起的错误[^4]。 --- #### 5. 查看日志验证效果 默认情况下,大多数 Linux 发行版会在 `/var/log/syslog` 或者专门的 `/var/log/cron` 记录所有的 `cron` 执行情况。可以用下面命令查找最近的相关活动: ```bash grep CRON /var/log/syslog # 或者对于 RHEL/CentOS/Fedora 用户 tail -f /var/log/cron ``` 通过观察输出结果判断是否按预期触发了目标脚本。 --- ### 总结 综上所述,利用 `crontab` 实现自动化周期性作业涉及几个关键环节——从基础的服务管理到具体的时间表设定再到潜在陷阱规避均需逐一落实到位才能保障整个流程顺畅运作[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰 河

可以吃鸡腿么?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值