这是福强的第213篇原创 原文链接 https://afoo.me Hey, guys Launchd plist Composer 1.0 is released, check it out, 写这个工具的初衷是有很多MacOS的后台服务或者调度服务需要写配置文件,尤其是调度规则的编写,launchd的plist配置文件没法像crontab那样写个简单的表达式,手工编写xml又比较繁琐,所以, 虽然最初是为了方便起草launchd的plist配置文件,但原则上所有的plist文件都可以在Launchd plist Composer工具中起草,只要拖拽(drag and drop)自定义内容的node
使用brew命令进行启动就报错。 直接更新brew即可: brew update -v 然后重启即可。
先看一下系统日志 ---- $ tail -F /var/log/system.log Feb 5 21:09:01 Sun-Zhongweis-MacBook-Pro com.apple.xpc.launchd Feb 5 21:09:09 Sun-Zhongweis-MacBook-Pro com.apple.xpc.launchd[1] (com.apple.nowplayingtouchui): Service Feb 5 21:09:11 Sun-Zhongweis-MacBook-Pro com.apple.xpc.launchd[1] (com.alipay.DispatcherService[11486 Feb 5 21:09:11 Sun-Zhongweis-MacBook-Pro com.apple.xpc.launchd[1] (com.apple.ReportCrash.Root[11487] Feb 5 21:09:21 Sun-Zhongweis-MacBook-Pro com.apple.xpc.launchd[1] (com.alipay.DispatcherService[11489
XPC 服务由 launchd 管理,并为单个应用程序提供服务。它们通常用于将一个应用程序划分为更小的部分。 0x2 启动进程域 如前所述,XPC服务是由launchd管理的。launchd是如何将XPC服务限制在指定的进程中的呢? 如:launchctl print pid/129 更多关于launchd域名的信息可以从saelo的优秀演讲bits_of_launchd中找到。 当然,你也可以使用低级别的XPC消息,甚至是MACH消息,通过bootstrap端口与launchd进行通信。 从man launchd.plist中,我们知道一个服务可以监视一个文件路径或者监听一个socket。
1 root 40u IPv4 0xe1fc8d3044233469 0t0 TCP localhost:intu-ec-client (LISTEN) launchd 1 root 41u IPv6 0xe1fc8d26b1acd419 0t0 TCP localhost:intu-ec-client (LISTEN) launchd 1 root 42u IPv4 0xe1fc8d3044233469 0t0 TCP localhost:intu-ec-client (LISTEN) launchd 1 root 43u IPv6 0xe1fc8d26b1acd419 0t0 TCP localhost:intu-ec-client (LISTEN) 发现占用的PID是1,即系统的 launchd 进程 因为 launchd 进程会根据所在的 /Library/LaunchDaemons 和 /Library/LaunchAgents 目录中的配置文件来管理各个服务或应用,扫描文件找到服务,当然这个目录也可能是
以设置 JAVA_HOME 为例 launchctl setenv JAVA_HOME=$(/usr/libexec/java_home) 在/etc/launchd.conf 添加 setenv JAVA_HOME echo "launchctl setenv JAVA_HOME=$(/usr/libexec/java_home)" > ~/.zshenv 显然该方法只对当前用户有效 如何持久化2:launchd.plist 下面这篇文章介绍了如何基于launchd.plist设置应用程序的环境变量 《HowTo: Set an Environment Variable in Mac OS X - launchd.plist GUI applications》 《-vm value: macOS Example》 《HowTo: Set an Environment Variable in Mac OS X - /etc/launchd.conf 》 《HowTo: Set an Environment Variable in Mac OS X - launchd.plist》 《What should/shouldn’t go in .zshenv
建议:适合不具备编程经验的用户 + 免费首选 借助launchd 实现Mac 系统中网络变化时自动触发并运行指定脚本 简介 launchd是在Mac 上自带的一个执行定时任务的服务(相当于Linux launchd支持的属性有定时任务(StartCalendarInterval),启动运行程序(Startup Process),监控文件变动(WatchPaths)等。 因此借助launchd 服务中的WatchPaths特征,就可以实现监控到该文件变化的时候执行指定的脚本文件。 实现 launchd 的常规配置步骤比较繁琐,包括编辑plist 文件,放置文件到指定文件夹,通过命令行启用等等。 Github 地址:https://github.com/Jeff2Ma/launchd-with-networkchange (欢迎给个star 哦!)
不过在Mac上,自从10.4(也就是Tiger)起,crontab已经被deprecated了,因为Apple推出了一款更强大的工具launchd a unified, open-source 最大的区别是在系统即将sleep或shutdown的情况下,如果此时schedule的任务刚好要执行,两者对它的处理方式的不同,crontab只是简单的不运行此调度任务,但launchd会注意到此任务被终止了 launchd有两种形式: launchDaemons和launchAgents,这两种形式有何区别呢? daemon代表的是root用户或者任何你用UserName这个key(这个key在下文所说的plist文件里指定)指定的用户的任务 任务及其表示形式 好了,现在我们已经知道了launchd 实际上launchd的每一个任务(job)都对应了一个plist文件(以xml的格式), 它被launchd视为daemon还是agent就看我们把它放在以下哪个目录下了 类型 位置 代表谁执行
设置开机自启动 0、run sudo npm i -g pm2 1、run pm2 start verdaccio & pm2 startup outputs: [PM2] Init System found: launchd following command: sudo env PATH=$PATH:/usr/local/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup launchd Users/luozhu 2、run sudo env PATH=$PATH:/usr/local/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup launchd PM2] Freeze a process list on reboot via: $ pm2 save [PM2] Remove init script via: $ pm2 unstartup launchd
configured to only allow connections from localhost by default To connect run: mysql -uroot To have launchd configured to only allow connections from localhost by default To connect run: mysql -uroot To have launchd
To have launchd start jenkins now and restart at login: brew services start jenkins Or, if you don't To have launchd start jenkins now and restart at login: brew services start jenkins Or, if you don't
Mac OS launchd 不用想, 定时器不会被执行的,crontab 已经被 Mac OS废弃了,替代品就是 launchd launchd 配置目录 用来存放 定时器任务配置文件的 有5个目录
具体步骤 emond是一个普通的守护进程,每次系统启动时都会由launchd执行,其对于launchd的配置文件和其他系统守护进程在同一个地方:/System/Library/LaunchDaemons Launchd负责在启动过程中执行所有LaunchDaemons和LaunchAgent。 不过这样持久性机制还有一个奇怪之处:launchd会在启动过程中执行emond,但是在QueueDirectories路径中存在一个文件之前,服务将保持不活动状态。
计划任务可以采用Task Scheduler(windows)、launchd(OS X)、cron(linux)等系统工具。 效果: ? 当然,也可以采用发送短信的方式进行通知。
wheel 121278 Jun 9 10:52 adobegc.log drwx------ 3 mugpeng wheel 96 Jun 2 13:36 com.apple.launchd.CEG3EUNUCk drwx------ 3 mugpeng wheel 96 Jun 2 13:36 com.apple.launchd.lp7oclZNYU drwxr-xr-x@ 2 mugpeng
elasticsearch_sss.log Plugins: /usr/local/var/elasticsearch/plugins/ Config: /usr/local/etc/elasticsearch/ 启动 To have launchd 5b63979700897722.png] [5088755_1556366142811_16782311-64837d4e1260e906.png] Config: /usr/local/etc/kibana/ To have launchd
5、列举当前目录下的所有文件,类似于shell中的ls命令 >>> os.listdir('.') ['.keystone_install_lock', 'com.apple.launchd.Haenu0YBGr com.google.Keystone', 'powerlog', 'KSDownloadAction.kArMUqmIGL', 'KSInstallAction.XG3CXseysP', 'com.apple.launchd.ImXO2x8tjW
如果哪天你想让它开机启动了,则将unload 改为 load: sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist launchd
相比同类的 SysVinit 竞争者,例如Ubuntu 的 upstart,Systemd 的设计更加前卫,简单来说,它的设计思路借鉴了Mac系统的启动程序Launchd。
configured to only allow connections from localhost by default To connect run: mysql -uroot To have launchd