CentOS 7设置crontab定时运行Python3脚本

前些天写了个爬并应壁纸的脚本,测试了几天,爬的效果还不错,现在通过crontab设置成定时任务,每天自动爬壁纸,美滋滋啊。

参考链接:

要用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年了。搞好时间后脚本也正常运行了,没有错误的邮件了。当然壁纸也顺利拿到啦~~
bingwallpaper.jpg

完结撒花~~!

标签: none

添加新评论

ali-01.gifali-58.gifali-09.gifali-23.gifali-04.gifali-46.gifali-57.gifali-22.gifali-38.gifali-13.gifali-10.gifali-34.gifali-06.gifali-37.gifali-42.gifali-35.gifali-12.gifali-30.gifali-16.gifali-54.gifali-55.gifali-59.gif

加载中……