前段时间在一台公网服务器上搭建了vpn服务用来映射内网一台gitlab服务器,实现跨网络也能进行代码提交等操作.过程中经过查找网络上的博客文档基本都没啥问题,但是后续使用过程中,发现客户端(pptp-linux)vpn连接会自动断开(大约是晚上的时候),后面写了一个脚本后台常驻,检测vpn是否连接,如果断开则自动重连.但是问题来了,如果服务器关机了然后开机,则不会自动去连接,需要手工执行连接的脚本.于是,查找相关的systemd方式实现开机启动执行相关脚本.由于内网服务器默认登录的账户不是root身份,所以使用其他小伙伴的建立/etc/rc.local文件的方式是未成功.以下是测试能够通过的方式(我的内网gitlab服务器是Ubuntu18.04.1-server版,理论上只要使用systemd的方式来管理系统服务启动的发行版都可以)
准备好要执行的脚本文件(auto_conn.sh)
1 |
|
注: 某条命令需要sudo执行的话,在脚本中可使用echo 'xxxxxx' | sudo -S 的方式,xxxxxx就是对应的密码
然后给脚本添加执行权限.sudo chmod +x
创建一个service文件
sudo vim /etc/systemd/system/auto_startVPN.service
详细内容如下:
1 | [Unit] |
service文件一般正常的启动文件主要分成三部分
[Unit] 段: 启动顺序与依赖关系
[Service] 段: 启动行为,如何启动,启动类型
[Install] 段: 定义如何安装这个配置文件,即怎样做到开机启动
使用systemctl命令使能这个服务开机启动
sudo systemctl daemon-reload
//重新加载配置文件
sudo systemctl enable auto_startVPN.service
//设置开机启动刚刚新建的自动连接vpn的服务
重启电脑,等待个大约10多秒,执行ifconfig,会发现连接中会有ppp0这个网卡设备和对应的ip地址等信息,说明脚本执行成功也成功的自动连接上了vpn服务器.