Cron-Linux-必备定时工具 (cron两小时执行一次)
1. Cron and Crontab
Cron is a powerful utility in Unix systems that allows users to schedule tasks to run automatically at specified times or intervals. It is managed through the crontab file, which contains a list of commands that are executed based on the specified schedule. The crontab file is maintained by the cron daemon, which runs in the background and checks the crontab periodically for any scheduled tasks that need to be executed.2. Cron Expression
Cron uses a specific format called a cron expression to define the schedule for tasks. This expression consists of five fields, each representing a different component of the schedule: Minute: The minute of the hour (0-59) Hour: The hour of the day (0-23) Day of Month: The day of the month (1-31) Month: The month of the year (1-12 or month abbreviation) Day of Week: The day of the week (0-6, where 0 or 7 represents Sunday) These fields can be specified in various ways: Using a range (e.g., 1-3) Using a comma-separated list (e.g., 1,3,5) Using the asterisk () to represent all values in a field For example, the cron expression "0 8 2" would schedule a task to run at 8:00 AM on every Tuesday.3. Crontab Command
The crontab command is used to manage crontabs. It has several subcommands: -e: Edit the current user's crontab file -l: List the current user's crontab contents -r: Delete the current user's crontab file To edit your crontab, use the following command: ``` crontab -e ``` This will open the crontab file in your default editor, where you can add, edit, or delete cron jobs.4. Cron Expression Examples
Here are some common cron expression examples: Every hour: `0 ` Every day at midnight: `0 0 ` Every Monday at 8:00 AM: `0 8 1` Every 15 minutes: `/15 ` On the 1st and 15th of every month: `1,15 `5. Special Characters
Cron expressions can also use special characters: ?: Matches any single character in a field -: Represents a range of values ,: Separates values within a field /: Increments by a specified amount6. Logs and Output
The standard output and standard error of cron jobs are usually sent via email to the job's owner. You can use the `>>` operator to redirect the output to a file for logging and debugging purposes.7. Security Note
It is important to secure the crontab files to prevent malicious tasks from being executed. Ensure that only authorized users can edit crontab files to maintain system integrity.8. System Cron and User Crontab
Unix systems have both a system-wide crontab and user-specific crontabs. The system crontab is located at `/etc/crontab` and is managed by root. User-specific crontabs are stored in the `/var/spool/cron/crontabs` directory and are owned by the respective users.Conclusion
Cron is a powerful tool for automating tasks in Unix systems. By understanding the cron expression format and using the crontab command, you can efficiently schedule tasks and streamline your system processes. Remember to consider security implications and maintain proper logging for effective task management and system monitoring.linux定时器?
在 Linux 中,可以使用 cron 定时器来定期执行任务。cron 是一个在后台运行的守护进程,用于根据指定的时间表自动执行任务。
下面是 cron 定时器的基本用法:
linux crontab命令
Linux:crontab点排序(表达式、转义、权限管理、日志)
摘要:Linux,crontab组织crontab的使用,包括cron表达式,设置和删除任务,权限管理,查看日志。
crontab命令用于提交和管理用户需要定期执行的任务,类似于windows下的调度任务。安装操作系统时,默认情况下会安装这个服务工具,并且crond进程会自动启动。crond进程会每分钟定时检查是否有任务要执行,如果有任务要执行,就会自动执行任务。
使用以下命令启动、关闭、重新启动crontab服务并检查其状态
启动和关闭需要root权限,所有用户都可以查看状态,例如
Crontab通过设置cronexpression(cronexpression的基本语法)让计算机识别如何定期调度任务
前五个*分别代表分钟、小时、一个月中的某一天、一年中的某一天和一周中的某一天。最后一个命令是要执行的任务语句。详情及取值范围见下图。
其中*代表所有值,例如,以下代表在每年的9月27日17:07执行一个命令,对星期几没有限制。
可以看出,crontab的最小粒度被调度在分钟级别,最粗的级别是月,不限年份,所以每年至少执行一次。
9月27日星期一将执行上述两条语句,一条在当天17:13,另一条在当天17:17,在/tmp/文件中先后写入两条记录。
当星期几的位置设置为*时,不需要注意冲突,也就是说,对星期几没有限制。
另外,cron表达式支持一些特征符号匹配阿拉伯数字来设置each*,可以实现or,everyother,from,to的逻辑,分别对应三个常用符号,,/,-,分别解释如下。
分别举几个例子。
(1)17:43,44执行任务。
(2)每2分钟执行一次任务。
(3)执行任务从52点到56点,共5次。
我们来整理一波常见的cron表情。
如果不设置这个,可以单独写在一个shell脚本中,使用bash解释就可以正常运行执行。
在当前用户下,crontab-e用于编辑和添加计划任务。第一次使用时,不会显示用户的crontab,然后可以选择一种编辑方式,输入3,回车。如果不是第一次设置,也可以在终端输入select-editor,以后再设置。
设置完成后,输入crontab-e进入。该方法进入当前用户的crontab界面,可以在cron表达式中写入新的一行进行设置,比如
如果您可以使用#注释掉一行,cron表达式将不会生效。编辑完毕,输入wq!保存并关闭
一个直接的方法是使用crontab-rr,这个方法会删除该用户下的所有crontab任务,其他用户的任务如果不影响就不会被删除。慎用。如果只想删除其中的一个任务,可以直接进入编辑删除行。
任务查看使用crontab-l命令,该命令可以查看当前用户的crontab任务。
![Linux](https://tyye.cn/zb_users/theme/tpure/style/images/lazyload.png)
linux机器上的每个不同用户都有自己的crontab-e文件来设置自己的调度任务,这些任务在同一台机器上运行,互不干扰。root用户可以在使用crontab-e时切换其他用户进行设置,例如
上面的语句是为root下的测试用户设置一个调度任务。如果是普通用户,在没有-u权限的情况下会报错。
Crontab-e处于用户级别,它设置每个用户自己的计划任务。/etc/crontab在系统级,设置系统的例行任务。/etc/crontab只对root用户有读写权限,普通用户只有读权限。
与crontab-e相比,/etc/crontab有更多的环境变量和用户名的配置。root用户为每个任务统一配置用户名,设置的环境变量对/etc/crontab下的所有任务都有效,比如修改他的python到anaconda的搜索路径。
该设置仅对/etc/crontab有效,但对crontab-e的每个用户无效。
/etc/crontab用于设置系统的例行计划任务。
意味着系统任务是按小时、每天、每周、每月执行的,其中test-x/usr/sbin/anacron表示条件测试文件是否可执行。如果可执行文件忽略以下命令内容,在这种情况下,系统将转到anacron并读取/etc/anacrontab下的内容。
可以看到,机器调用run-parts命令和/etc/、/etc/、/etc/来执行调度任务。
由于linux支持不同的用户设置自己的任务,所以你可以在一个地方看到所有用户设置的任务/var/spool/cron/crontabs。只有root用户可以访问该目录。
目录中有三个文件,对应三个用户。root用户可以读写这些文件,相当于用crontab-e在这里设置和修改任务,直接在里面编辑相当于切到一个用户执行crontab-e。
默认情况下,ubuntucrontab中没有日志文件。您需要在配置中设置日志文件的位置。配置文件位于/etc/rsyslog.d/中。
设置并重新启动rsyslog服务。
看看下面下一个crontab日志的格式。
该日志包括执行时间、主机名、用户和执行的任务信息。任务信息包括被执行用户cron的命令和设置编辑crontab的记录,表示在哪个时间执行了哪个用户的哪个命令语句。
这两行反映了错误消息。
Crontab在执行脚本时不会直接输出错误的信息,而是以邮件的形式发送到你的邮箱。这个时候,你需要一个邮件服务器。如果您没有安装电子邮件服务器,它将报告这个错误:没有安装mta,丢弃输出。解决方法是将错误的内容写入文件,比如添加>:例如pop3,ssh,telnet,ftp等都会记录在此.
2)/ar/log/wtmp:记录登录着的信息记录,被编码过,所以必须以last解析;
3)/var/log/messages:记录Linux操作系统常见的系统和服务错误信息
4)/var/:记录一些开机或者关机启动的一些服务显示的启动或者关闭的信息;
5)/var/log/maillog:记录邮件的存取和往来;
6)/var/log/cron:用来记录crontab这个服务的内容;
7)/var/log/httpd,/var/log/等等文件,记录几个不同的网络服务的记录文件;
8)/var/log/acpid,ACPI-AdvancedConfigurationandPowerInterface,表示高级配置和电源管理接口。后面的d表示deamon。acpid也就是theACPIeventdaemon。也就是acpi的消息进程。用来控制、获取、管理acpi的状态的服务程序。
9)/var/run/utmp记录着现在登录的用户;10)/var/log/lastlog记录每个用户最后的登录信息;11)/var/log/btmp记录错误的登录尝试;12)/var/log/dmesg内核日志;13)/var/log/cpusCPU的处理信息;14)/var/log/syslog事件记录监控程序日志;15)/var/log/用户认证日志;16)/var/log/系统进程日志;17)/var/log/邮件错误信息;18)/var/log/邮件信息;19)/var/log/邮件警告信息;20)/var/log/系统监控程序产生的信息;21)/var/log/kern内核产生的信息;22)/var/log/lpr行打印机假脱机系统产生的信息。
超时取消订单怎么处理?
1.定时轮询
最简单的方法,写好取消订单的逻辑,一般是取订单表待付款状态的订单,然后做遍历取消处理,使用Linux系统的crontab定时执行取消订单功能。
优点:简单快捷,业务小的可以考虑
缺点:
由于Linux的限制,只能精确到秒
轮询频率不能自主控制,如果运维和开发分开管理,每次调整需要运维配置修改
如果第一次轮询耗时长,第二次轮询又开始了,会造成任务重复执行
占用数据库资源
不能并发执行
2.任务调度
一些web框架会带有任务调度的功能,像php的Laravel框架。
优点:
轮询频率可以做到用代码来控制,不完全依赖系统;
任务可以做到不重复执行
缺点:跟定时轮询差不多
3.延迟队列处理
如果系统有太多的订单需要处理,那么处理的时间就要很长,假如第一次轮询还没结束,第二次又开始了,就会造成任务的重复执行,同时抑制占用数据库资源,造成数据库压力大,用延迟队列做取消订单处理,设定延迟时间为提交订单之后的30分钟执行,效率会高很多,常用的延时队列有
redis(订阅键的失效事件)
框架自带的队列(例如Laravel框架自带的队列)
rabbitMQ延迟队列
优点:
不需要对订单表轮询处理,减少数据库压力
不会重复执行
效率高
可配合多线程处理
业务量大的方便做集群
不依赖系统的crontab
linux下如何开机自启动dhcp服务?
1,通过编辑/etc/文件来使dhcp服务开机自启动
使用命令vi/etc/,
然后在文件最后一行添加“sudo/etc/init.d/dhcp3-serverstart”就能使dhcp服务开机自启动。
2,使用crontab任务提交计划
先写一个简单的检查dhcp服务是否启动了的脚本:
#!/bin/bash ps-ef|grepdhcp|grep-vgrep if then exit0 else sudo/etc/init.d/dhcp3-serverstart>/dev/null2>1 fi
如果在用户目录下没有cron文件,使用vi新建一个的crontab文件,将以下内容写进去:
*/5****bash$HOME/
然后提交,这样系统就会在每5分钟运行一次脚本,检测dhcp服务已经启动了,如果没有启动或者停止了就会再启动一次。
3,注册系统服务
chkconfig--add服务名称(首先,添加为系统服务,注意add前面有两个横杠)
chkconfig-leve启动级别服务名on
(说明,3级别代表在命令行模式启动,5级别代表在图形界面启动,on表示开启)
chkconfig-leve启动级别服务名off
(说明,off表示关闭自启动)
例如注册dhcp为系统服务并在开机时自启动:
chkconfig--adddhcp chkconfig-level3dhcpon
总结一下:第一种方法其实是将指定服务设置为开机自启动,第三种方法是将服务升级为系统服务并且设置为开机时启动,而第二种方法对于那些最好或者必须开机启动的服务最好不要使用,但是可以使用crontab来实时监测服务是否在线。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。