图标不正常怎么办呢(图标出不来怎么回事)
907
2022-05-30
简介
crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务
命令格式
命令格式:crontab [-u username] [-l|-e|-r]
参数:
-u: 只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度;
-e: 编辑crontab 的工作内容;
-l: 查阅crontab的工作内容;
-r: 删除所有的crontab的工作内容,若仅要删除一项,请用-e去编辑
查看帮助文档
如果使用 crontab -h 会报错,但也会输出一个简写的帮助文档
正确的查看帮助文档的方法是使用 man crontab
系统的计划任务放在 /etc/crontab,并且里面有计划参数的解析注释 <分钟> <小时> <当月的第几日> <月> <每周的第几天> <定时执行的命令>
周的数字为0或7时,都代表“星期天”的意思。另外,还有一些辅助的字符,大概有下面这些:
编写定时任务
crontab的环境变量在 /etc/crontab 中,与我们系统的环境变量不同,因此所有文件都要用绝对路径。用相对路径不能正常执行。
下面以每分钟执行一次为例
定时执行计划
cron.crontab
* * * * * echo `date '+\%F \%T' > /home/chen/output.txt`
1
定时执行脚本
不包含变量
shell1.crontab
*/1 * * * * /home/chen/test1.sh`
1
test1.sh
#!/bin/bash #!/bin/bash echo test >> /home/chen/output.txt
1
2
3
包含变量
shell2.crontab
*/1 * * * * /home/chen/test1.sh >> /home/chen/output.txt
1
test2.sh
#!/bin/bash start_time=`date -d '-1 minute' '+%F %T'` end_time=`date '+%F %T'` echo ${start_time} ${end_time}
1
2
3
4
定时执行python脚本
python控制台重定向到文件
py1.crontab
* * * * * /usr/bin/python home/chen/print.py >> /home/chen/output.txt
1
print.py
#!/usr/bin/python # -*- coding: UTF-8 -*- import datetime now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") before_time = (datetime.datetime.now()+datetime.timedelta(minutes=-1)).strftime("%Y-%m-%d %H:%M:%S"); print before_time, now_time
1
2
3
4
5
6
7
8
python直接写入文件
py2.crontab
* * * * * python home/chen/file.py
1
file.py
#!/usr/bin/python # -*- coding: UTF-8 -*- import datetime now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") before_time = (datetime.datetime.now()+datetime.timedelta(minutes=-1)).strftime("%Y-%m-%d %H:%M:%S"); #print before_time, now_time f = open('/home/chen/output.txt', 'a'); f.write(before_time + ' &' + now_time + '\n') f.close();
1
2
3
4
5
6
7
8
9
10
11
常用命令
执行定时任务 crontab <脚本路径> 命令执行计划,例如 crontab task1.crontab
列出当前任务 cronta -l
编辑当前任务 crontab -e
删除所有任务 crontab -r
注意事项
在自定义的 crontab 文件 和 crontab -e 的定时任务编辑器中,可以定义变量
统一时刻,只能执行一个定时任务。当运行新的任务时,之前的任务会被自动取消
定时计划可以用批处理文件,例如:* * * * * <批处理文件的完整路径>。一定要用完整路径,而非相对路径!!!
定时任务的百分号%前面一定要加一个转义符号\,如果不加会被当做换行符,而不是命令
任务计划中可以定义变量<变量名>=<变量值>。但是“变量值”只能是常量,不能引用其他变量。例如end_time=${date '+%F %T'} 会被当做字符串原样输出,无法达到预期效果。如果要定义这种变量,建议换至shell文件中。
如果定时任务没有任何反应,一定是计划文件中的语法有误
由于定时任务都是在后台执行的,因此没有回显,可以通过重定向到文件,判断其是否执行成功。另外,通过 tail -f <文件绝对路径> 持续输出
查看日志
编辑配置文件 sudo vim /etc/rsyslog.d/50-default.conf
将cron前面的注释符去掉 cron.* /var/log/cron.log。
保存文件时用 : w ! sudo tee %
tee 用于读取输入文件,同时保存。%表示当前编辑文件。
注意:该方法要求当前编辑用户必须在 sudoers这个文件中,这也是执行sudo命令的要求。
之后重启 rsyslog 和 cron
sudo service rsyslog restart sudo service cron restart
1
2
后面执行 cat /var/log/cron.log 即可查看后续日志了
查看日志可以发现,每当启用一个定时任务,之前的就被替换了(即同一时刻只能存在一个定时任务)
发现报错:(CRON) info (No MTA installed, discarding output)
原因有两个:
命令中含有shell指令
执行任务过程中会往屏幕输出内容
报错原因:报错的主要原因是没有配置邮件服务器
解决办法:安装并重新配置邮件服务器
sudo apt-get install postfix sudo dpkg-reconfigure postfix
1
2
MAIL (mailed 26 bytes of output but got status 0x004b from MTA#012)
查看日志 tail -f /var/log/cron.log,发现报错
由于是邮件错误,因此查看邮件日志 tail /var/log/mail.log。错误如下:fatal: open /etc/postfix/main.cf: No such file or directory
执行 sudo dpkg-reconfigure postfix 命令,在配置项里面选择除了第1项以外的(我是选第2项)
Linux
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。