sta*_*zel 72 macos shell cron time scheduled-tasks
如何运行每个脚本,比如30分钟?我假设不同的操作系统有不同的方法.我正在使用OS X.
Mec*_*cki 116
只需使用launchd.它是一个非常强大的启动器系统,同时它是Mac OS X的标准启动器系统(当前的OS X版本甚至没有启动它).对于那些谁不熟悉launchd
(或OS X一般),它就像之间的杂交init
,cron
,at
,的SysVinit( ),init.d
和.借用所有这些项目的概念,同时提供您在其他地方找不到的东西.inetd
upstart
systemd
每个服务/任务都是一个文件.文件的位置取决于以下问题:"此服务何时运行?" 和"服务需要哪些特权?"
系统任务转到
/Library/LaunchDaemons/
Run Code Online (Sandbox Code Playgroud)
如果他们将运行,无论是否有用户登录到系统.它们将以"root"权限启动.
如果他们只有在任何用户登录时才会运行,他们会去
/Library/LaunchAgents/
Run Code Online (Sandbox Code Playgroud)
并将使用刚刚登录的用户的权限执行.
如果他们只有在您登录时才会运行,他们会去
~/Library/LaunchAgents/
Run Code Online (Sandbox Code Playgroud)
其中〜是您的HOME目录.这些任务将以您的权限运行,就像您通过命令行自己启动它们或双击Finder中的文件一样.
请注意,也存在/System/Library/LaunchDaemons
和/System/Library/LaunchAgents
,但像往常一样,一切都在/System
由OS X.管理您不得将任何文件那里,你不得修改任何文件存在,除非你真的知道自己在做什么.在Systems文件夹中乱搞可能会使您的系统无法使用(使其进入甚至拒绝再次启动的状态).这些是Apple放置launchd
在启动期间启动和运行系统的任务,根据需要自动启动服务,执行系统维护任务等的目录.
每个launchd
任务都有一个plist格式的文件.它应该具有反向域名表示法.例如,您可以命名您的任务
com.example.my-fancy-task.plist
Run Code Online (Sandbox Code Playgroud)
这个plist可以有各种选项和设置.每手写一个是不理想的,你可能想要获得免费工具Lingon来创建你的任务.这个工具过去是免费的,现在它在应用程序商店中的价格是5美元,而非应用程序商店版本的价格是10美元(非应用程序商店版本功能更强大,如果你已经计划付费,那么,请认真购买非应用程序商店版).如果有人知道一个类似的免费软件或开源工具,请在评论中留言,我宁愿推荐一个(不想在这里做商业软件广告).
举个例子,它可能看起来像这样
<?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>
Run Code Online (Sandbox Code Playgroud)
此代理将每1800秒(每30分钟)运行一次shell脚本/usr/local/bin/my-script.sh.您还可以在某些日期/时间运行任务(基本上启动可以执行cron可以执行的所有操作),或者您甚至可以禁用"OnDemand"导致launchd保持进程永久运行(如果它退出或崩溃,launchd将立即重新启动它) .您甚至可以限制进程可以使用的资源量(如前所述,Lingon在一个漂亮的UI界面中显示所有这些设置).
更新: 即使OnDemand
仍然受支持,也不推荐使用.新设置已命名KeepAlive
,这更有意义.它可以有一个布尔值,在这种情况下它是完全相反的OnDemand
(将其设置false
为好像OnDemand
是true
,反之亦然).伟大的新功能是,它也可以有一个字典值而不是布尔值.如果它有一个字典值,你有几个额外的选项可以让你更精细地控制颗粒,在这种情况下任务应该保持活着.例如,只要程序以退出代码零结束,只有当磁盘上的某个文件/目录存在时,它才会保持活动状态,只有当另一个任务也处于活动状态时,或者仅当网络当前处于运行状态时.
您还可以通过命令行手动启用/禁用任务:
launchctl <command> <parameter>
Run Code Online (Sandbox Code Playgroud)
命令可以加载或卸载,加载plist或再次卸载它,在这种情况下参数是文件的路径.或者命令可以是启动或停止,只是启动或停止这样的任务,在这种情况下参数是标签(com.example.my-fancy-task).还存在其他命令和选项.
请参阅Apple的plist格式文档和launchctl
命令行工具(请注意,您可以在顶部选择OS X版本,因为格式/选项在不同的OS X版本之间有所不同)
Kos*_*aur 41
你可以使用非常方便的plist发生器:http://launched.zerowidth.com/(不需要买任何东西......)
它会给你一个shell one-liner来注册一个已经推荐的launchd的新预定作业
MAC OS 有一个Automator Tool,与 Windows 中的任务计划程序相同。使用 Automator,您可以每天安排任务,并将任务与定期日历事件链接起来,以便在每天的指定时间运行脚本。请参阅链接以在 Mac OS 中每天运行脚本
您可以使用 cron 来安排任务。
crontab -e
Run Code Online (Sandbox Code Playgroud)
作业按以下格式指定。
* * * * * command to execute
? ? ? ? ?
? ? ? ? ???? day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
? ? ? ????????? month (1 - 12)
? ? ?????????????? day of month (1 - 31)
? ??????????????????? hour (0 - 23)
???????????????????????? min (0 - 59)
Run Code Online (Sandbox Code Playgroud)
例子:
0 12 * * * cd ~/backupfolder && ./backup.sh
Run Code Online (Sandbox Code Playgroud)
安装 cron 任务后,您可以使用 crontab -l 列出您的任务。
crontab -l
Run Code Online (Sandbox Code Playgroud)
如果您想了解更多关于 cron 调度表达式的信息,您可以访问
https://crontab.guru https://ole.michelsen.dk/blog/schedule-jobs-with-crontab-on-mac-osx.html
归档时间: |
|
查看次数: |
51722 次 |
最近记录: |