【问题标题】:How to open the website at the certain moment using shell?如何使用shell在某个时刻打开网站?
【发布时间】:2015-04-21 01:33:18
【问题描述】:

我正在寻找如何在特定时间打开网站的解决方案。考虑到shell编程,可以通过命令打开网站:

$ open http://stackoverflow.com

如果可能的话,在某个时刻怎么做?

【问题讨论】:

    标签: macos shell terminal


    【解决方案1】:

    你可以使用crontab来制作。

    crontab 是您要定期运行的命令列表 schedule,以及用于管理该列表的命令的名称。

    crontab 代表“cron 表”,因为它使用作业调度程序 cron 执行任务; cron 本身以希腊语“chronos”命名 时间的单词。

    假设你有一个脚本/bin/openURL.sh来打开一个网站,

    30 21* * * /bin/OpenURL.sh
    

    表示每天 21 : 30 执行。

    更多关于crontab的用法,见http://www.computerhope.com/unix/ucrontab.htm

    【讨论】:

      【解决方案2】:

      对于一次性作业(计划任务),at 命令安排简单,正如 John1024 的自删除答案所证明的那样,但 atOSX 上的缺点

      • 必须先启用;这是一次性操作:sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist
      • 您必须使用sudo(具有管理权限)才能使用at 安排作业。
      • 如果作业产生任何输出,它将使用mail邮寄给用户,作为标准输出和标准错误输出(我不知道如何抑制这种情况)。
      • 示例:计划在 19:00(晚上 7 点)打开http://stackoverflow.com一次
        • sudo bash -c 'echo "open http://stackoverflow.com" | at 19:00'

      crontab 用于 周期性 作业 OSX 上的一个选项 ;例如,安排在每天 19:00(晚上 7 点)打开http://stackoverflow.com 的作业:

      • 运行 crontab -e 在编辑器中打开当前用户的 cronfile。
      • 添加以下行,保存并关闭文件:
        • 0 19 * * * open http://stackoverflow.com
      • 如果作业产生任何输出,它将使用mail邮寄给用户,作为标准输出和标准错误输出的组合(我不知道如何抑制这种情况)。

      但是,OSX 的官方建议 是使用 launchd 进行一次性和周期性工作

      • launchd 非常灵活并且集中所有作业调度;与 crontab 一样,存在系统范围和每个用户的作业。
      • 缺点是定义作业所需的 .plist 文件创建起来很麻烦且不容易

      使用我们之前的示例:

      一次性工作:(打开http://stackoverflow.com一次,19:00 (7 PM))

      • 创建文件~/test.plist(对于一次性工作,位置无关紧要)。
      • 粘贴以下内容:
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
      <dict>
        <key>Label</key>
        <string>TestJob</string>
        <key>ProgramArguments</key>
        <array>
          <string>open</string>
          <string>http://stackoverflow.com</string>
        </array>
        <key>LaunchOnlyOnce</key>
        <true/>
        <key>StartCalendarInterval</key>
        <dict>
          <key>Hour</key>
          <integer>19</integer>
          <key>Minute</key>
          <integer>00</integer>
        </dict>
      </dict>
      </plist>
      
      • TestJob 唯一标识您的工作。
      • LaunchOnlyOnce 设置为true 可确保作业只运行一次。
      • 从终端运行 launchctl load ~/test.plist 以加载作业。

      定期工作:http://stackoverflow.com每天 19:00(晚上 7 点)开放

      • 创建文件~/Library/LaunchAgents/testPeriodic.plist
        • 注意:位置很重要:~/Library/LaunchAgents 是每个用户的作业定义 *.plist 文件必须驻留的位置,以便在每次登录时自动加载。
      • 粘贴以下内容:
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
      <dict>
        <key>Label</key>
        <string>TestJobPeriodic</string>
        <key>ProgramArguments</key>
        <array>
          <string>open</string>
          <string>http://stackoverflow.com</string>
        </array>
        <key>StartCalendarInterval</key>
        <dict>
          <key>Hour</key>
          <integer>19</integer>
          <key>Minute</key>
          <integer>00</integer>
        </dict>
      </dict>
      </plist>
      
      • 同样,TestJobPeriodic 唯一标识您的工作。
      • 作业定期运行默认情况下(即,LaunchOnlyOnce缺席使作业定期运行)。
      • 从终端运行 launchctl load ~/Library/LaunchAgents/testPeriodic.plist 以加载作业。

      有关背景信息,请参阅https://stackoverflow.com/a/23880156/45375

      【讨论】:

        猜你喜欢
        • 2012-10-03
        • 1970-01-01
        • 2021-05-12
        • 1970-01-01
        • 2012-05-08
        • 1970-01-01
        • 2016-08-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多