【发布时间】:2015-04-21 01:33:18
【问题描述】:
我正在寻找如何在特定时间打开网站的解决方案。考虑到shell编程,可以通过命令打开网站:
$ open http://stackoverflow.com
如果可能的话,在某个时刻怎么做?
【问题讨论】:
我正在寻找如何在特定时间打开网站的解决方案。考虑到shell编程,可以通过命令打开网站:
$ open http://stackoverflow.com
如果可能的话,在某个时刻怎么做?
【问题讨论】:
你可以使用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
【讨论】:
对于一次性作业(计划任务),at 命令安排简单,正如 John1024 的自删除答案所证明的那样,但 at 有 OSX 上的缺点:
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist。sudo(具有管理权限)才能使用at 安排作业。mail邮寄给用户,作为标准输出和标准错误输出(我不知道如何抑制这种情况)。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.commail邮寄给用户,作为标准输出和标准错误输出的组合(我不知道如何抑制这种情况)。但是,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。
【讨论】: