对于一些不稳定又难于定位的问题的服务,可以定时重启下,这是最简单的办法。

创建定时任务(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 ps查看相关服务

docker.png

创建定时任务

命令行输入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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐