centos 7如何设置crontab?
centos的权限要求比较严格,很多在ubuntu下没有问题的,在Centos下可能就会现问题。比如要定时执行一个python脚本。要点如下:
- 在管理员模式下:chmod 777 /mydir
- crontab -u centos -e
- 编辑时,需要指定 SHELL=/bin/bash,而python3命令需要写全路径。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=centos
HOME=/
* * * * * cd /home/centos/send_me_local_ip && /usr/local/bin/python3 sendlocalip.py
注意,如果不用cd命令,则需要保证可执行文件中的路径全是绝对路径。否则不能正常执行。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
坑:centos虽然在安装时已经选择了时区,但是系统默认时间还是世界标准时,因此需要修改为本地的时区。
方法一:tzselect 选择时区,按提示来即可,但是这种方法不能永久修改时区。
方法二:ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
或者 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
修改完成后,需要重启电脑,或者重启2个进程:systemctl restart rsyslog systemctl restart crond
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
[root@localhost ~]# systemctl status crond -l
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-04-02 21:38:12 CST; 49s ago
Main PID: 22837 (crond)
CGroup: /system.slice/crond.service
└─22837 /usr/sbin/crond -n
Apr 02 21:38:12 localhost.localdomain systemd[1]: Started Command Scheduler.
Apr 02 21:38:12 localhost.localdomain crond[22837]: (CRON) INFO (Syslog will be used instead of sendmail.)
Apr 02 21:38:12 localhost.localdomain crond[22837]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 53% if used.)
Apr 02 21:38:13 localhost.localdomain crond[22837]: ((null)) Unauthorized SELinux context=system_u:system_r:system_cronjob_t:s0-s0:c0.c1023 file_context=unconfined_u:object_r:etc_t:s0 (/etc/crontab)
Apr 02 21:38:13 localhost.localdomain crond[22837]: (root) FAILED (loading cron table)
Apr 02 21:38:13 localhost.localdomain crond[22837]: (CRON) INFO (running with inotify support)
Apr 02 21:38:13 localhost.localdomain crond[22837]: (CRON) INFO (@reboot jobs will be run at computer's startup.)
crontab没有运行,查看systemctl status crond 发现报了上面的错误,大致是说SELinus安全策略阻止执行,是因为crontab文件
的安全上下文不对(类似linus中的文件用户的操作权限),使用chcon命令修改对象的安全上下文 再重启crond服务
解决办法:
[root@localhost ~]# chcon -R -usystem_u -robject_r -tsystem_cron_spool_t /etc/crontab
[root@localhost ~]# sudo systemctl restart crond