Linux下Python脚本自启动与定时任务详解
背景
在Linux系统下,我们经常会遇到需要脚本自启动或者定时执行某些操作的情况。本篇文章将介绍如何在Linux系统下使用Python实现脚本自启动与定时任务。
自启动
想要实现Python脚本自启动,我们可以将Python脚本放在/etc/init.d/目录下,并在其中添加自启动脚本。具体操作步骤如下:
- 将Python脚本放置到/etc/init.d/目录下,比如命名为myscript.py。
- 使用vim或者其他编辑器,新建一个名为myscript的文件,内容如下:
```bash
#!/bin/bash
# chkconfig: 2345 10 90
# description: Script Start and Stop Service
case "$1" in
start)
echo "Start Service..."
python /etc/init.d/myscript.py &
echo $! > /var/run/myscript.pid
;;
stop)
echo "Stop Service..."
kill $(cat /var/run/myscript.pid)
rm /var/run/myscript.pid
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
```
- 添加可执行权限:
chmod +x myscript
- 将自启动脚本加入系统启动项:
chkconfig --add myscript
- 设置自启动脚本开机执行:
chkconfig myscript on
- 启动服务:
/etc/init.d/myscript start
- 停止服务:
/etc/init.d/myscript stop
这样就可以实现Python脚本自启动了。
定时任务
想要实现Python脚本定时执行,我们可以使用Linux系统内置的crontab功能。具体操作步骤如下:
- 进入crontab编辑页:
crontab -e
- 在文件末尾添加定时任务,例如:
bash
# 每小时的30分执行一次脚本
30 * * * * python /path/to/myscript.py
上述配置表示在每小时的30分时执行mypython.py脚本。
3. 保存并退出编辑器即可。
4. 查看所有定时任务:crontab -l
注意事项:
- 在Linux中,crontab的时间配置是以24小时模式为准的。
- crontab默认是使用Bash解析命令,因此在脚本中应该使用绝对路径指定Python解释器。例如:/usr/bin/python 或者 /usr/bin/env python。
示例
下面是一个示例的Python脚本,在每小时的30分时向指定邮箱发送一封邮件。
import smtplib
from email.mime.text import MIMEText
from email.header import Header
mail_host="smtp.qq.com"
mail_user="xxxx@qq.com"
mail_pass="xxxxx"
mail_port=465
sender = 'xxxx@qq.com'
receivers = ['xxxxx@163.com']
def send_mail():
message = MIMEText('Python 自动发送邮件测试', 'plain', 'utf-8')
message['From'] = Header("Python", 'utf-8')
message['To'] = Header("Test", 'utf-8')
subject = 'Python email test'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj = smtplib.SMTP_SSL(mail_host, mail_port)
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print("邮件发送成功")
except smtplib.SMTPException:
print("Error: 无法发送邮件")
if __name__ == '__main__':
send_mail()
我们可以将该脚本放到/etc/init.d/目录下,并配置自启动和定时任务,来实现每小时的30分自动发送一封测试邮件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux下Python脚本自启动与定时任务详解 - Python技术站