对于一些不稳定又难于定位的问题的服务,可以定时重启下,这是最简单的办法。
创建定时任务(centos7)
- 查看定时任务格式,输入如下命令:
# cd /etc
# cat crontab
可以看到以下内容
crond.png
编写如下:
- 0 2 * * * /home/blue/do/rsyncfile_day.sh 每天凌晨2点0分开始执行
- 0 2 1 4 * /home/blue/do/rsyncfile_day.sh 4月1号凌晨2点0分开始执行
- 0 2 * */2 * docker exec dnmp_nginx_1 certbot renew 每隔两月凌晨2点执行更新
-
查看docker服务
docker.png
输入命令docker ps查看相关服务
-
创建定时任务
命令行输入crontab -e会自动打开一个空文件
# crontab -e
然后输入需要重启的docket服务
如每隔5分钟重启下服务
*/5 * * * * docker restart yw-producer/container-id
重启定时任务
systemctl restart crond
然后通过日志观察系统定时重启。
- 查看定时任务文件
在/var/spool/cron/下面
# cd /var/spool/cron
# ls
这里可以看到一个root文件,因为我用的root账号登录,所以生成了一个root文件。
通过cat命令可以看到这个文件的内容就是前面编辑的内容。
也可以使用crontab -l查看所有定时任务。
- 查看定时任务执行记录
执行命令cat /var/spool/mail/root
,可以查看执行记录
image.png
image.png
定时执行脚本
若需要定时执行某一段脚本,也可以通过上面的定时任务设置
如可以在容器中添加脚本并执行。
- 进入容器
docker exec -it crontab_task bash
进入后可以看到以下文件
image.png
新建2个文件如下
shell文件:
#!/usr/bin/env python
python /home/demo1.py
py文件:
#! /usr/bin/env python
if __name__ == '__main__':
a = 1
b = 1
print(a+b)
接下来就是定时任务的设置了, crontab -e设置定时任务
*/1 * * * * docker restart crontab_task && docker exec crontab_task /bin/bash /home/demo.sh
重启定时任务并查看结果。
关于port is already allocated问题
是容器占用的port还没有完全释放
Docker 在启动容器时,报出了下面的错误:
docker: Error response from daemon: driver failed programming external connectivity on endpoint gateway_cc39fe5306c1 (cc39fe5306c1ba7633fa14b9bcddb66536153619bf57b84b30673e2328e9284g): Bind for 0.0.0.0:80 failed: port is already allocated.
查看进程,发现相关的容器并没有在运行,而 docker-proxy 却依然绑定着端口:
docker ps
ps -aux | grep -v grep | grep docker-proxy
删除所有容器,停止 doker 进程,然后删除 local-kv.db 这个文件,再启动 docker 就可以了。
docker rm $(docker ps -aq)
sudo service docker stop
sudo rm /var/lib/docker/network/files/local-kv.db
sudo service docker start
网友评论