crond和crontab的tag

本文详细介绍了Linux下的定时任务工具Cron及其配置工具Crontab的使用方法,包括服务管理、配置文件解析及常见用例。

一 cron

crond位于/etc/rc.d/init.d/crond 或 /etc/init.d 或 /etc/rc.d /rc5.d/S90crond,最总引用/var/lock/subsys/crond。

 

cron是一个linux下的定时执行工具(相当于windows下的scheduled task),可以在无需人工干预的情况下定时地运行任务task。由于cron 是Linux的service(deamon),可以用以下的方法启动、关闭这个服务: 
/sbin/service crond start //启动服务 
/sbin/service crond stop //关闭服务 
/sbin/service crond restart //重启服务 
/sbin/service crond reload //重新载入配置 

你也可以将这个服务在系统启动的时候自动启动: 
在/etc/rc.d/rc.local这个脚本的末尾加上: 
/sbin/service crond start 

现在cron这个服务已经在进程里面了,我们就可以用这个服务了。

 

二 crontab

crontab位于/usr/bin/crontab。

 

cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明: 
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数 
crontab -l //列出某个用户cron服务的详细内容 
crontab -r //删除某个用户的cron服务 
crontab -e //编辑某个用户的cron服务  


比如说root查看自己的cron设置:crontab -u root -l 
再例如,root想删除fred的cron设置:crontab -u fred -r 
在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e 进入vi编辑模式,编辑的内容一定要符合下面的格式:

*/1 * * * * ls >> /tmp/ls.txt 
这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下: 

分钟 (0-59) 
小時 (0-23) 
日期 (1-31) 
月份 (1-12) 
星期 (0-6)//0代表星期天 

除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。以下举几个例子说明问题: 

每天早上6点 
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。 

每两个小时 
0 */2 * * * echo "Have a break now." >> /tmp/test.txt 

晚上11点到早上8点之间每两个小时,早上八点 
0 23-7/2,8 * * * echo "Have a good dream:)" >> /tmp/test.txt 

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * 1-3 command line 

1月1日早上4点
0 4 1 1 * command line 

每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。 

 

三 编辑/etc/crontab配置文件 
cron的系统级配置文件位于/etc/crontab。


cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab配置文件,因此我们配置这个文件也能运用 cron服务做一些事情。用crontab -e进行的配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是: 

SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
MAILTO=root      //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 
HOME=/    //使用者运行的路径,这里是根目录 

# run-parts 

01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本 
02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本 
42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本 

大家注意"run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了。

 

四 实例

--------------------------------------

基本格式 : [参数间必须使用空格隔开]
*  *  *  *  *  command
分 时 日 月 周 命令

第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

crontab文件的一些例子:

30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启lighttpd 。

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启lighttpd 。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启lighttpd 。

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启lighttpd 。

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启lighttpd 。

* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启lighttpd 

* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启lighttpd 

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启lighttpd 

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启lighttpd 

 

五 特殊用法

@hourly /usr/local/www/awstats/cgi-bin/awstats.sh
使用 @hourly 對應的是 0 * * * *, 還有下述可以使用:
string            meaning
------           -------
@reboot        Run once, at startup.
@yearly         Run once a year, "0 0 1 1 *".
@annually      (same as @yearly)
@monthly       Run once a month, "0 0 1 * *".
@weekly        Run once a week, "0 0 * * 0".
@daily           Run once a day, "0 0 * * *".
@midnight      (same as @daily)
@hourly         Run once an hour, "0 * * * *". 
[root@HTNICE home]# cat /proc/version Linux version 5.10.140 (ylc@ylc-Precision-3571) (aarch64-linux-gcc.br_real (Buildroot 2022.02.6) 10.4.0, GNU ld (GNU Binutils) 2.36.1) #7 SMP Mon Feb 20 12:59:02 CST 2023 [root@HTNICE home]# busybox BusyBox v1.35.0 (2023-02-21 13:21:21 CST) multi-call binary. BusyBox is copyrighted by many authors between 1998-2015. Licensed under GPLv2. See source distribution for detailed copyright notices. Usage: busybox [function [arguments]...] or: busybox --list[-full] or: busybox --show SCRIPT or: busybox --install [-s] [DIR] or: function [arguments]... BusyBox is a multi-call binary that combines many common Unix utilities into a single executable. Most people will create a link to busybox for each function they wish to use and BusyBox will act like whatever it was invoked as. Currently defined functions: [, [[, addgroup, adduser, ar, arch, arp, arping, ascii, ash, awk, base32, base64, basename, bc, blkid, bunzip2, bzcat, cat, chattr, chgrp, chmod, chown, chroot, chrt, chvt, cksum, clear, cmp, cp, cpio, crc32, crond, crontab, cut, date, dc, dd, deallocvt, delgroup, deluser, depmod, devmem, df, diff, dirname, dmesg, dnsd, dnsdomainname, dos2unix, du, dumpkmap, echo, egrep, eject, env, ether-wake, expr, factor, fallocate, false, fbset, fdflush, fdformat, fdisk, fgrep, find, flock, fold, free, freeramdisk, fsck, fsfreeze, fstrim, fuser, getopt, getty, grep, gunzip, gzip, halt, hdparm, head, hexdump, hexedit, hostid, hostname, hwclock, i2cdetect, i2cdump, i2cget, i2cset, i2ctransfer, id, ifconfig, ifdown, ifup, inetd, init, insmod, install, ip, ipaddr, ipcrm, ipcs, iplink, ipneigh, iproute, iprule, iptunnel, kill, killall, killall5, klogd, last, less, link, linux32, linux64, linuxrc, ln, loadfont, loadkmap, logger, login, logname, losetup, ls, lsattr, lsmod, lsof, lspci, lsscsi, lsusb, lzcat, lzma, lzopcat, makedevs, md5sum, mdev, mesg, microcom, mim, mkdir, mkdosfs, mke2fs, mkfifo, mknod, mkpasswd, mkswap, mktemp, modinfo, modprobe, more, mount, mountpoint, mt, mv, nameif, netstat, nice, nl, nohup, nologin, nproc, nslookup, nuke, od, openvt, partprobe, passwd, paste, patch, pidof, ping, ping6, pipe_progress, pivot_root, poweroff, printenv, printf, ps, pwd, rdate, readlink, readprofile, realpath, reboot, renice, reset, resize, resume, rm, rmdir, rmmod, route, run-init, run-parts, runlevel, sed, seq, setarch, setconsole, setfattr, setkeycodes, setlogcons, setpriv, setserial, setsid, sh, sha1sum, sha256sum, sha3sum, sha512sum, shred, sleep, sort, start-stop-daemon, strings, stty, su, sulogin, svc, svok, swapoff, swapon, switch_root, sync, sysctl, syslogd, tail, tar, tc, tee, telnet, telnetd, test, tftp, time, top, touch, tr, traceroute, true, truncate, ts, tty, ubirename, udhcpc, udhcpd, uevent, umount, uname, uniq, unix2dos, unlink, unlzma, unlzop, unxz, unzip, uptime, usleep, uudecode, uuencode, vconfig, vi, vlock, w, watch, watchdog, wc, wget, which, who, whoami, xargs, xxd, xz, xzcat, yes, zcat [root@HTNICE home]# 我尝试使用这个系统进行网安agent探针开发,目前先尝试使用C语言标准库POSIX标准实现登录成功、退出登录、登陆失败、操作命令、串口数量信息、串口占用、串口释放等事件的日志记录
最新发布
09-09
<think>好的,我现在需要回答用户关于Linux系统中crontabcrond配置文件路径的问题。用户之前已经问过相关问题,我也给出了详细回答,现在用户再次明确询问这两个的配置文件位置,需要结合提供的引用内容来调整回答。 首先,确认用户的问题:用户想知道crontabcrond的配置文件路径。根据引用,crontab的配置文件分为用户级系统级,而crond作为守护进程,可能涉及多个配置文件,比如/etc/crontab、/etc/cron.d/等。需要区分crontab工具crond服务各自的配置位置。 根据引用[1],用户级的crontab文件存放在/var/spool/cron/目录下,每个用户一个文件,如root用户的文件是/var/spool/cron/root。而系统级的配置文件在/etc/crontab/etc/cron.d/目录下。引用[4]提到crond会检查这些文件的变化,无需重启服务。 引用[2]展示了/etc/crontab的结构,包含环境变量系统级任务。引用[5]提到访问控制文件/etc/cron.allow/etc/cron.deny,这需要包含在回答中。此外,日志文件的位置在/var/log/cron(RedHat系)或/var/log/syslog(Debian系),引用[3]提到了这一点。 需要确保回答结构清晰,分点说明用户级系统级的路径,同时提到相关配置文件如cron.allowcron.deny。另外,用户可能混淆crontab(命令用户配置文件)与crond(服务及其相关系统配置文件),需要明确区分。 可能还需要指出,crond本身没有单独的配置文件,而是通过读取上述多个文件目录来执行任务。因此,在回答中应明确说明crond依赖的这些配置文件的位置。 最后,检查是否有遗漏的引用内容,比如引用[4]提到crond每分钟检查的路径,包括/etc/crontab、/etc/cron.d//var/spool/cron,这些都要在回答中涵盖。同时,用户之前的问题涉及到调试日志,因此在回答中可以简要提到日志路径,但用户本次问题主要关注配置文件位置,所以日志部分可以作为补充信息。 总结回答结构: 1. Crontab的配置文件路径: - 用户级:/var/spool/cron/<用户名> - 系统级:/etc/crontab、/etc/cron.d/*、/etc/cron.*/目录 2. Crond相关配置文件: - 访问控制:/etc/cron.allow/etc/cron.deny - 环境变量设置:在/etc/crontab中定义(如SHELL, PATH等) 3. 注意事项:编辑用户级配置文件必须使用crontab -e,直接修改可能出错。 确保引用正确,例如用户级的路径参考引用[1][4],系统级参考引用[2][4],访问控制文件参考引用[5]。</think>##### **Linux系统中crontabcrond配置文件路径详解** 在Linux系统中,**crontab**(用户任务配置文件)**crond**(定时任务守护进程)的配置文件路径如下: --- ### **一、crontab配置文件路径** #### **1. 用户级配置文件** - **路径**:`/var/spool/cron/<用户名>` - 每个用户独立存储,例如: - root用户:`/var/spool/cron/root` - 普通用户test:`/var/spool/cron/test` - **编辑方式**:必须通过`crontab -e`命令修改,直接编辑可能引发格式错误或权限问题[^1][^4]。 #### **2. 系统级配置文件** - **主配置文件**:`/etc/crontab` - **格式**:需指定执行用户(如`root`): ```bash * * * * * root /path/to/command ``` - **环境变量**:该文件通常包含全局环境设置(如`PATH`、`MAILTO`等),示例内容如下[^2]: ```bash SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root ``` - **扩展目录**: - `/etc/cron.d/`:存放第三方应用的独立定时任务文件(每文件需符合cron格式)[^4]。 - 周期任务目录: - `/etc/cron.hourly/`:每小时执行 - `/etc/cron.daily/`:每天执行 - `/etc/cron.weekly/`:每周执行 - `/etc/cron.monthly/`:每月执行 --- ### **二、crond相关配置文件** #### **1. 服务控制文件** - **访问权限控制**: - `/etc/cron.allow`:允许使用`crontab`命令的用户白名单。 - `/etc/cron.deny`:禁止使用`crontab`命令的用户黑名单。 - 若两者均不存在,默认允许所有用户[^5]。 #### **2. 日志文件** - **路径**: - RedHat/CentOS:`/var/log/cron` - Debian/Ubuntu:`/var/log/syslog`(需通过`grep CRON`过滤日志)[^3]。 --- ### **三、关键机制说明** 1. **crond的配置文件加载** crond每分钟自动检查以下位置的变动: - `/etc/crontab` - `/etc/cron.d/`目录 - `/var/spool/cron/`目录下的用户文件 修改后无需重启服务即可生效。 2. **用户级与系统级任务的区别** - **用户级任务**:通过`crontab -e`配置,无需指定执行用户。 - **系统级任务**:需在`/etc/crontab`或`/etc/cron.d/`文件中明确指定执行用户[^1][^2]。 --- ##### **相关问题** 1. 如何通过`/etc/cron.deny`禁止普通用户创建定时任务? 2. 系统级定时任务中`run-parts`命令的作用是什么? 3. 如何避免crontab任务因环境变量缺失导致执行失败? 4. 在`/etc/cron.d/`目录中添加任务文件时需要注意哪些格式规范? [^1]: 用户级crontab文件必须通过`crontab -e`编辑,直接修改`/var/spool/cron/`下的文件可能导致语法错误或权限冲突。 [^2]: `/etc/crontab`中需指定执行用户,且支持全局环境变量配置(如`PATH`、`MAILTO`),适用于系统级任务[^2]。 [^3]: cron日志路径因Linux发行版而异,CentOS系统可通过`/var/log/cron`追踪任务执行情况[^3]。 [^4]: crond服务每分钟自动加载配置文件变更,无需手动重启即可生效[^4]。 [^5]: 通过`/etc/cron.allow``/etc/cron.deny`可灵活控制用户权限,若均不存在则默认允许所有用户使用crontab[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值