如何让每个脚本运行30分钟?我假设不同的操作系统有不同的方法。我使用的OS X.如何设置一个任务以便每隔一段时间运行一次?
回答
只需使用启动。这是一个非常强大的启动器系统,同时它也是Mac OS X的标准启动器系统(目前的OS X版本甚至没有启动系统就无法启动)。对于那些谁不熟悉launchd
(或OS X一般),它就像init
,cron
,at
,SysVinit的(init.d
),inetd
,upstart
和systemd
之间的杂交。借用所有这些项目的概念,但也提供您可能在其他地方找不到的东西。
每个服务/任务都是一个文件。该文件的位置取决于以下问题:“该服务应该何时运行?”和“服务需要哪些权限?”
系统任务去
/Library/LaunchDaemons/
如果他们奔跑,不管是否有用户在系统或没有登录。他们将以“根”权限启动。
如果如果任何用户登录他们将只运行,他们去
/Library/LaunchAgents/
,并会与刚登录的用户的权限执行。
若有人只运行,如果你是登录,他们去
~/Library/LaunchAgents/
的地方〜是你的HOME目录。这些任务将以您的权限运行,就像您自己通过命令行启动它们或双击Finder中的文件一样。
注意,也存在/System/Library/LaunchDaemons
和/System/Library/LaunchAgents
,但像往常一样,/System
下的一切是由OS X.管理您不得将任何文件那里,你不得修改任何文件存在,除非你真的知道你在做什么。在系统文件夹中发生的混乱可能会使您的系统无法使用(使其进入一种状态,甚至会拒绝重新启动)。这些是Apple放置launchd
任务的目录,这些任务使您的系统在启动过程中启动并运行,根据需要自动启动服务,执行系统维护任务等。
每个launchd
任务有一个plist格式的文件。它应该有反向域名表示法。例如。你可以命名你的任务
com.example.my-fancy-task.plist
这plist可以有各种选项和设置。每手写一篇文章不太理想,你可能想要免费工具Lingon来创建你的任务。这个工具以前是免费的,现在它在app store中的价格是5美元,在非app store商店中是10美元(非app store的版本更加强大,如果你已经计划付钱购买它,版)。如果有人知道免费软件或开放源代码的相似工具,请在评论中给我留一条线,我宁愿推荐一个(不想在此为商业软件做广告)。
只是作为一个例子,它可能看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.my-fancy-task</string>
<key>OnDemand</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/usr/local/bin/my-script.sh</string>
</array>
<key>StartInterval</key>
<integer>1800</integer>
</dict>
</plist>
此代理将运行shell脚本/usr/local/bin/my-script.sh每隔1800秒(每30分钟)。你也可以在某些日期/时间运行任务(基本上launchd可以完成cron可以做的所有事情),或者甚至可以禁用“OnDemand”,导致launchd保持进程永久运行(如果它退出或崩溃,launchd会立即重启) 。你甚至可以限制一个进程可以使用多少资源(如前所述,Lingon在一个不错的UI界面中显示所有这些设置)。
更新:尽管仍支持OnDemand
,但不推荐使用。新设置名为KeepAlive
,这更有意义。它可以有一个布尔值,在这种情况下,它与OnDemand
完全相反(将其设置为false
的行为如同OnDemand
为true
,反之亦然)。伟大的新功能是,它也可以具有字典值而不是布尔值。如果它具有字典值,那么您有几个额外的选项可以让您更好地控制粮食,在这种情况下任务应该保持活跃。例如。只要程序以退出代码0结束,只有在磁盘上存在某个文件/目录时,只有在另一个任务还活着时,或者只有在网络当前运行时,它才会保持活动状态。
您也可以手动启用通过命令行/禁用任务:
launchctl <command> <parameter>
命令可以加载或卸载,加载的plist或再次卸载它,在这种情况下,参数是文件路径。或者命令可以是开始或停止,只是启动或停止这样的任务,在这种情况下参数是标签(com.example.my-fancy-task)。其他命令和选项也存在。
看到苹果公司的plist format和launchctl
command line tool(请注意,您可以选择在顶部的OS X版本,因为该格式/选项都不同的OS X版本之间会发生变化)
对于苹果的脚本文件,我设置创建一个特殊的iCal日历并使用警报定期运行它们。对于命令行工具,我使用launchd。
正如Mecki指出的那样,launchd将会是这条路。有用于launchd的GUI界面称为Lingon,你可能想看看,而不是通过手工编辑的launchd文件:
Lingon是创建编辑的launchd 配置文件用于Mac OS X的图形用户界面豹10.5。
[snip ...]
编辑配置文件在这个版本 比以往更容易,它有两种不同的模式。基本模式有一个非常简单的界面和专家模式 中最常见的 设置,您可以直接在文本中添加所有设置,或通过菜单插入 。
仅供参考:虽然我很想念它的siplicity,但是cron在OS X上是过去的事情。它是关于豹的看门狗。自从Tiger推出后,所以如果你运行Leopard cron不是一个选项。
你可以使用非常方便的plist发生器:http://launched.zerowidth.com/(无需购买任何东西......)
它会给你一个壳状的衬垫来注册已经建议的launchd
新的预定作业Mac有一个Automator工具,它与Windows中的任务计划程序相同。但是使用Automator,您可以每天安排一项任务,并将任务与定期日历事件关联起来,以每天在指定时间运行脚本。参考链接to run scripts on daily basis in Mac OS
- 1. 在进程内每隔一段时间执行一次任务
- 2. 每隔一段时间运行一次例程
- 3. 如何在10-19之间每隔两小时设置一次Cron任务
- 4. 如何在nodejs中每隔5秒运行一次任务
- 5. 芹菜每隔一段时间发送一次任务,但每隔一段时间只接收和执行一次
- 6. 如何设置一个cronjob,每隔一个星期三运行5次?
- 7. 如何在每次任务中运行一个capistrano任务?
- 8. 每隔几小时运行一次任务
- 9. 运行任务周期性(每天一次/每周一次)
- 10. 如何每隔一小时运行一次广播接收器?
- 11. Coldfusion计划任务 - 每次任务运行时是否重置间隔?
- 12. 如何设置cron每隔一个半小时运行一些命令?
- 13. 设置方法运行一段时间?
- 14. 如何每隔几分钟运行一次cron作业每隔几小时运行一次
- 15. Android每隔X秒运行一次任务
- 16. 一个长时间运行的任务
- 17. 如何将CRON任务设置为每组实例只运行一次?
- 18. 如何注册一个Javascript函数以便在每次回发时运行?
- 19. 保持一种方法不断运行,另一种方法每隔一段时间执行一次
- 20. 每周运行一次任务,在Heroku上只运行4次
- 21. Windows服务,以每月一次运行
- 22. 每隔一段时间自动点击一次onclick事件
- 23. UITextField shouldBeginEditing每隔一段时间调用一次?
- 24. 在每隔一段时间IE 9不能在一段时间
- 25. 如何在Nodejs中每隔15天运行一次节点调度任务?
- 26. 运行每隔一小时的任务,在iPad
- 27. windows服务在C++中以一定的时间间隔运行一个方法
- 28. JFreechart:每隔一段时间对每个系列进行计数
- 29. Apache每隔一段时间崩溃PHP脚本运行... Windows
- 30. 如何在jsp页面中每隔一段时间检查一次数据库?
如果我作为用户想要运行即使没有登录时该怎么办?这是可能的,还是我必须要求管理员在/ Library/LaunchDaemons中放置一些东西? – 2008-09-25 16:19:05