AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 888580
Accepted
emk2203
emk2203
Asked: 2017-03-02 10:38:43 +0800 CST2017-03-02 10:38:43 +0800 CST 2017-03-02 10:38:43 +0800 CST

仅当 vpn 启动时才运行 cronjob / 定期作业

  • 772

我有一个脚本,只有在 VPN启动时才想运行。

当 VPN 启动和关闭时,我可以通过 OpenVPN 运行作业,但我希望在 VPN 启动时定期运行一项作业,而不是在它关闭时运行。

实现这一目标的最优雅的方法是什么?

scripts
  • 1 1 个回答
  • 1474 Views

1 个回答

  • Voted
  1. Best Answer
    emk2203
    2017-03-06T06:07:34+08:002017-03-06T06:07:34+08:00

    快速回答,所以问题有一些结束:

    @user535733 的评论在我看来是最好的方式。VPN 在启动时被禁用并在此系统中手动启动,由systemd disable openvpn.

    我vpn-up.sh在 VPN 启动后执行的脚本中添加了以下内容systemctl start openvpn:

    #!/bin/bash
    
    # Disable ipv6 to prevent leaks
    echo 1 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6
    
    # Start services e.g. transmission
    service transmission-daemon start
    
    # Heredoc for crontab entry in /etc/cron.d
    MINUTE=`date +%M`
    tee /etc/cron.d/piaport <<-EOF >/dev/null
        # /etc/cron.d/piaport: crontab entries for pia-port script
    
        SHELL=/bin/sh
        PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    
        ${MINUTE} * * * * root /usr/local/bin/pia-port >> /var/log/piaport.log 2>&1
    EOF
    

    该脚本启动并生成一个文件piaport,/etc/cron.d该文件在生成后一小时运行脚本,之后每小时运行一次。

    vpn-down.shVPN服务停止时运行的脚本systemctl stop openvpn:

    #!/bin/sh
    
    # Stop service like Transmission
    service transmission-daemon stop
    
    # Prevent DNS leaks 
    /etc/openvpn/update-resolv-conf
    
    # Reenable ipv6
    echo 0 > /proc/sys/net/ipv6/conf/eth0/disable_ipv6
    
    # Remove cronjob / heredoc
    rm /etc/cron.d/piaport
    

    对于意外重启,cronjob 调用的脚本会检查 VPN 是否存在,如果 cronjob/etc/cron.d/piaport剩余,则将其删除:

    部分脚本:

    # Check for tun0
    tuncheck=$( { /sbin/ifconfig tun0; } 2>&1 )
    
    tunnotfound="not found"
    if [ "${tuncheck/$tunnotfound}" = "$tuncheck" ] ; then
      echo "- VPN tunnel appears to be up and connected (Good!)"
    else
      echo "Error detected! tun0 does not exist."
      echo "Please make sure both internet and the VPN is connected!"
      echo ""
      echo "Then run this script again!"
      echo ""
      [[ -f /etc/cron.d/piaport ]] && rm -f /etc/cron.d/piaport
      exit
    

    总的来说,cronjob 仅在必要时运行,并且在 VPN 启动时运行。

    • 1

相关问题

  • 如何在 Nautilus 中管理保存的完整网页及其目录(例如 n.html 和 n_files)

  • 如何每 5 秒运行一次脚本?

  • 如何将必须从其自己的目录中运行的程序添加到面板或主菜单?

  • 如何编写 shell 脚本来安装应用程序列表?

  • Mac OS X Automator 的替代品?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve