文档章节

Mac上,执行定时任务:launchctl

shede333
 shede333
发布于 2015/06/24 18:14
字数 1309
阅读 6044
收藏 31
点赞 0
评论 2

在Mac上定时执行任务


在Mac上,执行定时任务,有两种方式:

  1. 使用launchctl
  2. 沿袭Linux常用的crontab命令

毕竟咱是在mac上开发,这里只讲launchctl的用法


##1.首先需要编写plist文件

下图是我的一个很简单的任务plist文件:

输入图片说明

可以使用plutil -lint来验证plist的格式是否正确(这只是代表plist格式正确,不代表里面的命令是有效的)

plist文件里具体的key可以参考:

  1. 苹果官方文档:The Mac OS X launchd plist format | launchd plist file format (valid keys) | alvinalexander.com
  2. Mac下添加定时任务 - 刘国涛的专栏 - 博客频道 - CSDN.NET

##2.定时脚本

上图使用的定时脚本为test.sh,以下为文件内容:

#!/bin/sh
say hello world  

上面的脚本会让电脑发声“hello world”,记得打开电脑音量~

注意:

你需要将test.sh置为可执行文件,可用命令:chmod a+x test.sh
否则的话,脚本就根本不可能执行的。网上很多文章都没强调这一点

你也可以使用ls -l看看test.sh是否可执行(拥有x权限),如下图:

输入图片说明


##3. plist文件放置处:

  • ~/Library/LaunchAgents 由用户自己定义的任务项
  • /Library/LaunchAgents 由管理员为用户定义的任务项
  • /Library/LaunchDaemons 由管理员定义的守护进程任务项
  • /System/Library/LaunchAgents 由Mac OS X为用户定义的任务项
  • /System/Library/LaunchDaemons 由Mac OS X定义的守护进程任务项

建议放在 ~/Library/LaunchAgents 下面。

下面再来理解几个基础概念:

/System/Library和/Library和~/Library目录的区别?

/System/Library目录是存放Apple自己开发的软件。
/Library目录是系统管理员存放的第三方软件。
~/Library/是用户自己存放的第三方软件。

LaunchDaemons和LaunchAgents的区别?

LaunchDaemons是用户未登陆前就启动的服务(守护进程)。
LaunchAgents是用户登陆后启动的服务(守护进程)。

参考自:
Mac launchctl StartInterval not working | launchctl launchd StartInterval, ThrottleInterval | alvinalexander.com


##4.加载命令

最常使用的命令:

  1. 加载任务 launchctl load -w ***.plist-w选项会将plist文件中无效的key覆盖掉,建议加上
  2. 删除任务 launchctl unload -w ***.plist
  3. 查看任务列表 launchctl list;列表会显示很多任务,建议过滤一下:launchctl list | grep '任务的部分名字'

launchctl命令可以参考:苹果官方文档:launchctl(1) Mac OS X Manual Page


##5.题外话

我在用 launchctl 或者 crontab 遇到同样的问题:

比如我的 launchctl 里面加载了脚本test.sh

test.sh 脚本的内容:

#!/bin/bash

svn status | xargs echo 
echo "out: 输出正确的中文"

在使用在launchctl 定时执行test.sh脚本的输出:
svn st | xargs echo: 这行输出如果有中文,中文部分乱码;
echo "out: 输出正确的中文": 这行会输出正确的中文

这里面就是编码的问题,之后我参考了下面的文章:

crontab,svn邮件,日志乱码解决方法(LINUX) :

前段时间一直为linux下的SVN邮件通知乱码而发愁,苦苦寻找了2个星期最终发现自己果然很白。。不知道是问题太简单了还是别的原因,,一直没有在网上找到解决的相关方法和资料(大部分都是windows下的配置,可是额D是linux哇)。下面是解决方法,希望对和我一样郁闷的人有帮助

之前有人说修改/etc/profile 加入环境量变,这个只能修改邮件本身的乱码问题,不能修正log diff中的乱码,乱码的原因是在svn调用post-commit的时候没有定义变量造成的,svn和crontab是无视系统默认变量的(=。=!!)。需要在post-commit中加入

#!/bin/sh

LANG=en_US.UTF-8

export LANG

之后svn或者crontab在调用的时候就可以正常输出中文了 编码可以按自己的情况进行修改~

按照里面的说明,将test.h脚本文件修改如下:

#!/bin/bash

LANG=en_US.UTF-8
export LANG

svn status | xargs echo 
echo "out: 输出正确的中文"

设置了编码之后,所有的输出立马就正常了。


##6.参考:

感兴趣的,想深入研究的,建议看看文章

苹果官方文档:

alvinalexander.com上的文章:

其他:

© 著作权归作者所有

共有 人打赏支持
shede333
粉丝 21
博文 22
码字总数 33599
作品 0
海淀
程序员
加载中

评论(2)

shede333
shede333

引用来自“taohe”的评论

如果是用户定义,又不想自动启动,应该放哪里?
只要不放在面说的那几个目录里面就行,就是说,你随便找个目录,可以试试,应该是这样的。
taohe
taohe
如果是用户定义,又不想自动启动,应该放哪里?
Mac中的定时任务利器:launchctl

launchctl是一个统一的服务管理框架,可以启动、停止和管理守护进程、应用程序、进程和脚本等。 launchctl是通过配置文件来指定执行周期和任务的。 当然mac也可以像linux系统一样,使用cront...

繁著
2017/09/01
0
0
Mac下定时任务清理内存

使用mac的小伙伴都知道,打开的程序多了用着用着,mac的内存就会飙升,如果你装有类似“腾讯电脑管家”,这货里面有个内存管理功能,类似于360的内存清理的浮动球,会发现他经常99%....虽然说...

康州牧码人
2016/10/26
294
0
Mac 使用 launchctl 定时运行程序

在linux下可以用crontab来定时执行任务,在MAC下可以用launchctl来定时执行任务。 我们使用launchctl来做一个定时执行任务的例子。 首先做一个可执行的脚本,脚本名字叫做:AutoMakeLog.sh,...

Jackin
2014/05/10
0
3
Mac Yosemite 10.10 下利用 Launchctl 自启动 mysql

由于目前MYSQL官方dmg安装包,只有10.9系统的安装包。如下图: 在10.10安装MYSQL的话,如果在dmg安装页面选择了“开机启动”则会,安装出错,只有取消勾选,才可安装成功! 如下图: 那么,这...

开源中国首席段子手
2016/04/03
62
0
管理Homebrew安装服务的选择面板--launchrocket

launchrocket 是 Mac 管理 Homebrew 安装服务的选择面板。 功能: 绿色/黄色/红色 状态指示器 绿色 -正在运行 launchctl 报告进程 黄色 - LaunchRocket 正在执行或者等待 开始/关闭 命令 红色...

叶秀兰
2014/02/12
985
0
osx 修改jenkins进程默认账户解决权限问题

将下面对应的位置分别修改为你需要的用户组和用户名 尽管通过expect实现了自动打包自动更新,定时打包,但是这些还不够,还需要指定的账户在需要的时候开始打包,我实现了一个通过websocket...

逐浪人
2016/11/18
87
0
在 OS X 中使用 OpenResty

移除 lighttpd 在 Mac OS X 上安装lighttpd 的时候,我使用 launchctl 来实现 lighttpd 的自动启动。现在,只需要 unload 即可。 launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.li...

Surjur
2015/08/01
0
0
Mac OS X: 应用层防火墙(ALF)

Mac OS X: 应用层防火墙(ALF) History: Initial: July 26, 2009 简介: Mac OS X系统拥有多种方式来控制数据从系统传入传出,传统的方式是使用ipfw, 而且有几个开源或者方便使用的配置软件可用...

junwong
2012/03/09
0
0
Mac OS X取消Apache(httpd)开机启动

安装MAMP后,启动服务时提示Apache启动失败,80端口被占用.查看进程发现存在几个httpd. OS X自带Apache,可是默认是没有启动的.我也没有开启Web共享,怎么就开机启动了呢? 不知道是不是因为安装了...

Surjur
2015/07/31
0
0
OS X: 实用脚本程序(bash scripts)系列-14

显示所有服务是否开启的状态(System Preferences->Sharing) 运行logger.sh程序, #!/bin/bash Logger, software to display information about the "divisions" in Mac OS X [10.6] 2011-05......

junwong
2012/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式 Factory工厂模式 Singleton单例模式 Delegate委派模式 Strategy策略模式 Prototype原型模式 Template模板模式 Spring5 beans 接口实例化 代理Bean操作 ...

小致dad
16分钟前
0
0
SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
9
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
12
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
203
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部