CentOS 7设置crontab定时运行Python3脚本
前些天写了个爬并应壁纸的脚本,测试了几天,爬的效果还不错,现在通过crontab设置成定时任务,每天自动爬壁纸,美滋滋啊。
参考链接:
- http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/06/3002602.html
- http://www.4455q.com/tech/centos-crontab.html
- https://my.oschina.net/yangalbert/blog/496494
- https://stackoverflow.com/questions/41861683/getpwnam-failed-in-bin-sh-only-when-called-from-cron
要用crontab首先肯定是要装crontab的,并将其设置为开机启动
$ yum install crontabs
$ systemctl enable crond
$ systemctl start crond
由于这个脚本不想当成某个用户的定时任务,所以直接写到系统的定时任务文件里。
$ vi /etc/crontab
会看到如下
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# 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
加上如下一行,表示在每天的1点0分执行一次,由于每个脚本都需要指定一个用户运行,这里指定为root,当脚本出现错误时,系统会发送给root用户相关的邮件信息。执行的脚本路径为/usr/scripts/getbing.py
0 1 * * * root /usr/scripts/getbing.py
在设置成定时任务前,可以先通过手动执行脚本的方式确认脚本无问题。不过即使这样在真正crontab执行时依然会发生不可预料的情况,比如我之前遇到了python3中文编码的问题,手动执行是没问题的,但是一到定时时间执行就报错。从系统发给我的邮件中看到错误信息如下:
[root@centos-rpi3 bing_wallpaper]# tail /var/spool/mail/root
Message-Id: <20170819073914.2D0EFF3E@centos-rpi3.localdomain>
Date: Sat, 19 Aug 2017 15:39:14 +0800 (CST)
Traceback (most recent call last):
File "/usr/scripts/getbing.py", line 41, in <module>
saveImage(file_path, 'wb', img_file);#save img file
File "/usr/scripts/getbing.py", line 24, in saveImage
f = open(file_path, open_mode)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 57-67: ordinal not in range(128)
可以看到依然是编码的问题,而且错误一个字都没变。我一生气直接重启了,重启后就好了……重启后记得$ date
看下系统当前的时间,因为我重启后不知道是ntp设置问题还是怎么了,系统时间变成1970年了。搞好时间后脚本也正常运行了,没有错误的邮件了。当然壁纸也顺利拿到啦~~
完结撒花~~!