1. 需求说明:
服务器上运行测试服务,但由于djnago的自带wsgi不稳定,会经常宕机,此时就需要监听端口,当端口关闭时,去重启服务就完成了需求,首先想到了linux自带的定时任务,crontab -e。
2.检测端关闭代码,并重启服务:
import socket
import os
import time
def IsOpen(ip, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((ip, int(port)))
s.shutdown(2)
# 利用shutdown()函数使socket双向数据传输变为单向数据传输。shutdown()需要一个单独的参数,
# 该参数表示了如何关闭socket。具体为:0表示禁止将来读;1表示禁止将来写;2表示禁止将来读和写。
return True
except:
return False
if __name__ == '__main__':
# # 获取本机电脑名
# myname = socket.getfqdn(socket.gethostname())
# # 获取本机ip
# myaddr = socket.gethostbyname(myname)
flag = IsOpen('192.168.0.155', 8001)
if flag:
print('项目正在运行,不要担心')
else:
print(f'项目宕机,立即重启,重启时间:{time.strftime("%Y/%m/%d %H:%M:%S", time.localtime(time.time()))}')
os.system('python manage.py runserver 0.0.0.0:8001 >> /home/cykj/git_product/logs/log.log 2>&1 &')
3. 使用crontab -e
3.1 第一次打开crontab -e 将要更换编辑器
输入:select-editor 命令
Select an editor. To change later, run 'select-editor'.
- /bin/ed
- /bin/nano
- /usr/bin/vim.tiny
Choose 1-3 [2]: 3
选择3vim编辑器,就可以用:wq保存了。
3.2 问题:
no crontab for cykj - using an empty one
crontab: installing new crontab
解决:使用 crontab -u 当前用户名(cykj) -e ,进行任务编辑,然后wq保存
3.3 编辑任务
*/1 * * * * /home/cykj/my_env/listen_env/bin/python3 /home/cykj/listen/lis.py >> /home/cykj/listen/1.txt
每分钟进行执行python脚本,并将python的输出内容重定向到1.txt中。
3.3.1 时间举例:
30 21 * * * /etc/init.d/nginx restart
每晚的21:30重启nginx。
45 4 1,10,22 * * /etc/init.d/nginx restart
每月1、10、22日的4 : 45重启nginx。
10 1 * * 6,0 /etc/init.d/nginx restart
每周六、周日的1 : 10重启nginx。
0,30 18-23 * * * /etc/init.d/nginx restart
每天18 : 00至23 : 00之间每隔30分钟重启nginx。
0 23 * * 6 /etc/init.d/nginx restart
每星期六晚上的23 : 00 pm重启nginx。
* */1 * * * /etc/init.d/nginx restart
每一小时重启nginx
* 23-7/1 * * * /etc/init.d/nginx restart
晚上11点到早上7点之间,每 隔一小时重启nginx
0 11 4 * mon-wed /etc/init.d/nginx restart
每月的4号与每周一到周三 的11点重启nginx
0 4 1 jan * /etc/init.d/nginx restart
一月一号的4点重启nginx
*/30 * * * * /usr/sbin/ntpdate 210.72.145.20
每30分钟(半小时)同步一下时间