标签:python shell debian systemd openvpn
在我的Raspbian机器上,我想要一个成功的OpenVPN连接到我的VPN提供程序来启动Python脚本,只要VPN连接处于活动状态,该脚本就会在后台持续运行.如果/当VPN连接脱机时,我想终止Python脚本.
我的想法是这样:OpenVPN配置文件中的向上和向下标志将执行启动和停止systemd服务的shell脚本.该服务需要openvpn.service并且不能(不应该)在没有它的情况下运行.
令人困惑的是,我想在Virtualenv中运行Python脚本,在bash中可以通过alias coding =“cd / home / p1 / Coding / Python / Virtual / py279 / bin; source activate; cd / home / p1 /编码/ Python的/项目”. Python文件的位置在后一个文件夹中.
但是,我的理解是systemd不能像上面的别名编码那样运行命令行.
所以我想解决方案可能是systemd执行一个执行.sh脚本的.service,然后执行.py Python脚本.
原理:
OpenVPN
up
→ovpn_up.sh
→sudo systemctl start vpn_up.service
→ExecStart=/path/to/start_pythonscript.sh
→coding; python my_script.py
OpenVPN
down
→ovpn_down.sh
→sudo systemctl stop vpn_up.service
我的假设是存在一些警告和/或问题,特别是关于如何正确终止Python脚本.
问题:
>这可行吗?
>这需要服务文件中的哪些部分和服务命令才能生效?
>对于这种整体安排,是否有任何特殊的考虑因素,例如:在终止Python脚本后进行适当的清理,系统关闭/重启等会发生什么?
解决方法:
你应该先简化你的别名,不需要做激活的东西.重要的是python脚本的第一个,shebang,line.它应该是:
#!/path/to/your/virtualenv/bin/python
如果脚本是可执行的(chmod x script_name),则上面的行确保调用virtualenv中安装的python,并确保在virtualenv中安装的软件包.
您可以为脚本创建别名,或将脚本放在PATH中的某个目录中.
在systemd服务文件中,您应该使用脚本的完整路径.这样的脚本可能看起来像:
[Unit]
Description=your program description
Requires=any services that need to be installed
After=run after this service
[Service]
Restart=always
ExecStart=/root/bin/application start
ExecStop=/root/bin/application stop
[Install]
WantedBy=multi-user.target
以上假设您的python脚本位于/ root / bin / application中,并且如果在start命令行参数中传递它会启动,并且当使用stop调用它时,不知何故第二次调用知道如何通知已启动的应用程序并正常关闭. IIRC如果您没有ExecStop系统将尝试停止/终止您的应用程序,您可以用signal handler捕获
标签:python,shell,debian,systemd,openvpn 来源: https://codeday.me/bug/20190816/1672154.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。