launchctl及其配置、使用、示例

在这里插入图片描述

文章目录

  • launchctl 是什么
  • Unix / Linux类似的工具有什么
  • 哪个更常用
  • 配置
  • 使用
  • 常用子命令
  • 示例
    • 加载一个 launch agent:
    • 卸载一个 launch daemon:
    • 列出所有已加载的服务:
    • 启动一个服务:
    • 停止一个服务:
    • 禁用一个服务:
    • 启用一个服务:
  • 附com.example.myagent.plist内容
  • 有趣的例子
  • 参考

launchctl 是什么

launchctl 是 macOS 操作系统中的一个命令行工具,它用于与 launchd 守护进程进行交互。launchd 是 macOS 的服务管理框架,负责启动、停止和管理系统级和用户级的守护进程、应用程序、脚本和其他进程。launchctl 可以用于加载、卸载、启动、停止和管理这些进程的配置文件,这些配置文件通常称为 “launch agents”(用户级别)和 “launch daemons”(系统级别),并以 .plist(Property List)文件格式存储。

Unix / Linux类似的工具有什么

在 Unix/Linux 系统上与 macOS 的 launchctl 命令类似的工具和服务管理框架主要有以下几个:

  • Systemd (systemctl)
    systemd 是现代 Linux 发行版中广泛使用的系统和服务管理器,替代了传统的 System V init 系统。与 launchctl 类似,systemd 使用 systemctl 命令来管理服务,包括启动、停止、重启、启用和禁用服务。服务配置通常通过位于 /etc/systemd/system/ 或 /usr/lib/systemd/system/ 的 .service 文件来定义。

  • Upstart (initctl)
    在 systemd 出现之前,Upstart 是某些 Linux 发行版(如早期的 Ubuntu 版本)使用的替代 init 系统。它提供 initctl 命令来管理服务。虽然 Upstart 目前已经被许多发行版淘汰,但仍可能在一些较旧的系统中找到。

  • SysVinit (/etc/init.d scripts)
    SysVinit 是早期 Unix 和 Linux 系统使用的传统初始化系统。它使用脚本位于 /etc/init.d/ 的目录来启动和停止系统服务。虽然现代发行版已经转向 systemd,但某些系统仍然支持 SysVinit 脚本,或者提供与 systemd 的兼容层。

  • Cron (crontab)
    对于定时任务,cron 是 Unix/Linux 系统上的传统工具。它不是服务管理器,但可以定时运行任务。用户可以通过 crontab 命令来编辑个人的定时任务列表,系统级的 cron 任务则配置在 /etc/cron.* 目录下。

每个工具和框架都有其独特的特点和用法,但它们的基本功能——确保在指定的时间或条件下运行或停止程序和脚本——和 launchctl 类似。随着 Linux 发行版向 systemd 迁移,systemctl 已成为服务管理的事实标准。

哪个更常用

在现代 Linux 发行版中,systemd(及其工具 systemctl)是最常用的服务管理和初始化系统。自从它于 2010 年引入以来,systemd 已经取代了传统的 SysVinit 和 Upstart,并且被许多主流 Linux 发行版采用,包括:

Fedora
Debian(从 Debian 8 “Jessie” 开始)
Ubuntu(从 Ubuntu 15.04 “Vivid Vervet” 开始)
CentOS(从 CentOS 7 开始)
Red Hat Enterprise Linux(从 RHEL 7 开始)
SUSE Linux Enterprise Server
openSUSE
systemd 提供了对系统服务的集中管理,它不仅仅用于启动和停止服务,还管理系统启动过程、挂载点、定时任务(替代 cron)、日志记录(通过 journald)等。systemctl 命令是与 systemd 交互的主要方式,它允许你启动和停止服务、查看服务状态、启用和禁用服务的自动启动等。

SysVinit 仍然在一些较旧的系统或特定的环境中被使用,尤其是在那些对 systemd 的复杂性和特性有所保留的情况下。

cron 在定时任务方面也依然非常普及,尽管 systemd 提供了定时器(timers)功能来替代它,但许多系统管理员和用户出于习惯或者对 cron 熟悉程度的考虑,依然选择使用 cron。

在 macOS 系统中,launchctl 与 launchd 结合,仍然是管理守护进程、应用程序和其他自动启动任务的标准工具,没有直接的 Linux 对应物。

综上所述,在 Linux 环境中,systemd 和 systemctl 目前是最常用的,而在 macOS 上,则是 launchctl。

配置

launchd 通过 .plist 配置文件来管理任务。这些文件通常位于以下目录:

  • /System/Library/LaunchDaemons/:存放系统级守护进程配置文件,由系统所有者或管理员管理。
  • /Library/LaunchDaemons/:存放第三方应用程序的系统级守护进程配置文件。
  • /System/Library/LaunchAgents/:存放系统级代理配置文件。
  • /Library/LaunchAgents/:存放第三方应用程序的用户级代理配置文件。
  • ~/Library/LaunchAgents/:存放用户级代理配置文件,只影响当前用户。

.plist 文件包含了用于描述服务的键值对,例如要执行的命令、启动条件、环境变量等。

使用

launchctl 的基本使用语法如下:

  • launchctl <subcommand> …
    <subcommand> 是指定给 launchctl 的子命令,用于执行各种操作,如 load, unload, start, stop, list 等。

常用子命令

*load: 加载指定的 .plist 文件到 launchd。

  • unload: 卸载指定的 .plist 文件,停止对应的服务。
  • start: 启动一个由 .plist 文件定义的服务。
  • stop: 停止一个由 .plist 文件定义的服务。
  • list: 列出已加载的服务。
  • enable: 启用指定的服务。
  • disable: 禁用指定的服务。

示例

以下是一些使用 launchctl 的示例:

加载一个 launch agent:

launchctl load ~/Library/LaunchAgents/com.example.myagent.plist

这将加载用户级别的 com.example.myagent 服务。

卸载一个 launch daemon:

sudo launchctl unload /Library/LaunchDaemons/com.example.mydaemon.plist

这将卸载系统级别的 com.example.mydaemon 服务。注意,对于系统级别的操作通常需要 sudo。

列出所有已加载的服务:

launchctl list

使用这个命令可以查看所有当前由 launchd 管理的服务。

启动一个服务:

launchctl start com.example.myagent

如果 com.example.myagent 已经加载,这个命令会启动它。

停止一个服务:

launchctl stop com.example.myagent

这将停止 com.example.myagent 服务。

禁用一个服务:

sudo launchctl disable system/com.example.mydaemon

禁用名为 com.example.mydaemon 的系统级服务。

启用一个服务:

launchctl enable user/<UID>/com.example.myagent

启用某个用户(UID 指定)的 com.example.myagent 服务。

随着 macOS 版本的更新,launchctl 的命令和语法可能发生变化。因此,建议查看系统中的 man launchctl 手册页面或官方 Apple 开发者文档以获取最新的使用信息和命令格式。

附com.example.myagent.plist内容

一个典型的 com.example.myagent.plist 文件,包含了 launchd 服务所需的配置信息。它通常以 XML 格式定义,并且遵循 Property List(plist)的格式。以下是一个示例 .plist 文件的内容,它配置了一个每10秒运行一次的示例任务:

<?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><!-- Label for the job --><key>Label</key><string>com.example.myagent</string><!-- Program to execute --><key>ProgramArguments</key><array><string>/usr/bin/say</string><string>Hello, world!</string></array><!-- Run at load --><key>RunAtLoad</key><true/><!-- Keep the job alive, always run it --><key>KeepAlive</key><false/><!-- StartInterval in seconds --><key>StartInterval</key><integer>10</integer><!-- Environment variables --><key>EnvironmentVariables</key><dict><key>PATH</key><string>/usr/bin:/bin:/usr/sbin:/sbin</string></dict><!-- Standard output and error paths --><key>StandardOutPath</key><string>/tmp/com.example.myagent.out</string><key>StandardErrorPath</key><string>/tmp/com.example.myagent.err</string>
</dict>
</plist>

在这个例子中:

  • Label: 服务的唯一标识符。
  • ProgramArguments: 要执行的命令和参数,这里的例子是使用 /usr/bin/say 命令让系统朗读一段文本。
  • RunAtLoad: 是否在加载 .plist 文件时立即运行服务(这里是 true)。
  • KeepAlive: 服务是否应该保持运行,这里设置为 false。
  • StartInterval: 服务运行的间隔,单位为秒。这里设置为每10秒运行一次。
  • EnvironmentVariables: 在运行服务时要使用的环境变量。
  • StandardOutPath 和 StandardErrorPath: 服务的标准输出和错误输出将被重定向到的文件路径。

请注意,上述 .plist 文件只是一个简单例子,用于演示如何定义一个定时运行的任务。在实际情况中,你可能需要根据需要配置更为复杂的任务,并且安全地存储日志和输出。

为了使用该服务,你需要将这个 .plist 文件放置在合适的位置,通常是 ~/Library/LaunchAgents/,然后使用 launchctl 加载它。记得根据你的 macOS 版本检查 launchctl 的具体使用方法,因为命令和语法可能会有所不同。

有趣的例子

让我们创建一个有趣的 launchctl 例子,我们将设置一个简单的 launch agent 任务,它将每天在指定的时间用 macOS 的语音合成功能朗读一句鼓励的话或者笑话。这样,每天在一个固定的时间,你的电脑就会给你一些积极的能量或一个笑容。

首先,你需要创建一个 .plist 文件,比如叫做 com.user.encouragement.plist,并保存到你的 ~/Library/LaunchAgents/ 目录下。

<?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>com.user.encouragement</string><key>ProgramArguments</key><array><string>/usr/bin/say</string><string>Remember, you are awesome!</string></array><key>RunAtLoad</key><false/><key>StartCalendarInterval</key><dict><key>Hour</key><integer>9</integer><key>Minute</key><integer>30</integer></dict>
</dict>
</plist>

在这个例子中,ProgramArguments 指定了要执行的命令,这里是 say 命令,后面跟着要朗读的句子 “Remember, you are awesome!”。RunAtLoad 设置为 false,表示不会在加载时执行。StartCalendarInterval 设置了任务应当执行的时间,这里是每天的早上 9:30。

保存了这个 .plist 文件之后,你可以使用以下 launchctl 命令来加载和启动这个任务:

launchctl load ~/Library/LaunchAgents/com.user.encouragement.plist

为了确保这个任务在你的电脑重启后继续工作,你需要将它设为启动时自动加载。因为我们已经使用 launchctl load 命令加载了这个任务,它将在下一个登录时自动启动。

如果你想要测试看看这个任务是否按预期工作,可以手动触发:

launchctl start com.user.encouragement

这将立即执行这个任务,你应该能听到你的电脑用语音朗读 “Remember, you are awesome!”。

如果你想卸载这个任务,可以使用:

launchctl unload ~/Library/LaunchAgents/com.user.encouragement.plist

这个小例子是一个简单而又有趣的 launchctl 的应用,证明了你可以用它来给日常电脑使用带来一些乐趣和积极的能量。

参考

Script management with launchd in Terminal on Mac

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/752067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vb.net+zxing.net随机彩色二维码、条形码

需要zxing库支持ZXing.NET Generate QR Code & Barcode in C# Alternatives | IronBarcode 效果图&#xff1a; 思路&#xff1a;先生成1个单位的二维码&#xff0c;然后再通过像素填充颜色&#xff0c;颜色数组要通过洗牌算法 洗牌算法 Dim shuffledCards As New List(…

牛客NC278 删除链表中重复的结点【中等 链表 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef 这题有一次面试某团的第一道题 思考 链表的基本操作参考答案Java import java.util.*; /*public class ListNode {int val;ListNode next null;ListNode(int val) {this.v…

【Linux杂货铺】进程的基本概念

目录 &#x1f308;前言&#x1f308; &#x1f4c1;进程的概念 &#x1f4c2;描述进程-PCB &#x1f4c2; 查看进程 &#x1f4c2; 查看正在运行的程序 &#x1f4c2;杀死进程 &#x1f4c2;通过系统调用获取进程标识符 &#x1f4c2;通过系统调用创建进程 &#x1f…

初阶结构体

在这篇文章中我们只讲一些结构体的一些基础的知识&#xff0c;后续会继续补充关于结构体的高阶知识。 1.结构体声明 1.1结构体的基本知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 结构可以用来描述复杂对象&#xff0c;在…

day10-SpringBootWeb案例-1

一、准备工作 1 需求&环境搭建 步骤&#xff1a; 准备数据库表(dept、emp)创建 springboot 工程&#xff0c;引入对应的起步依赖&#xff08;web、mybatis、mysql 驱动、lombok&#xff09;配置文件 application.properties 中引入 mybatis 的配置信息&#xff0c;准备对应…

CI/CD实战-gitlab代码仓库 2

gitlab安装部署 实验虚拟机最小需求&#xff1a;4g内存&#xff0c;4核cpu 下载源&#xff1a;Index of /gitlab-ce/yum/el7/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 安装依赖性&#xff1a; 安装软件&#xff1a; 修改依赖性配置文件 重新自动化配置 登录…

快速排序(数据结构)

1. 前言&#xff1a; 这两种排序经常使用&#xff0c;且在算法题中经常遇见。 这里我们简单分析讨论一下。 1. 快速排序 平均时间复杂度&#xff1a;O&#xff08;nlogn&#xff09; 最坏时间复杂度&#xff1a; O&#xff08;n^2&#xff09; 1.1. 左右向中遍历: 取最右侧4…

HarmonyOS NEXT应用开发—发布图片评论

介绍 本示例将通过发布图片评论场景&#xff0c;介绍如何使用startAbilityForResult接口拉起相机拍照&#xff0c;并获取相机返回的数据。 效果图预览 使用说明 通过startAbilityForResult接口拉起相机&#xff0c;拍照后获取图片地址。 实现思路 创建CommentData类&#…

腾讯云轻量应用服务器2核4G5M代表什么意思?

腾讯云服务器2核4G5M带宽配置是代表什么&#xff1f;代表2核CPU、4G内存、5M公网带宽&#xff0c;这是一款轻量应用服务器&#xff0c;系统盘为60GB SSD云硬盘&#xff0c;活动页面 txybk.com/go/txy 活动打开如下图&#xff1a; 腾讯云2核4G5M服务器 如上图所示&#xff0c;这…

HCIA——TCP协议详解

目录 1、TCP概念及协议头部格式 1.1TCP特点 1.2TCP协议协议头部格式 1.3字段进行介绍 1.3.1源端口和目的端口 1.3.2序号(seq) 1.3.3确认序号(ack) 1.3.4数据偏移 1.3.5标志位 1.3.6窗口 1.3.7校验和 1.3.8紧急指针 2、TCP的可靠性 2.1 TCP可靠性的保障 2.2排序机…

Android Studio实现内容丰富的安卓博客发布平台

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动 项目编号078 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看博客列表 3.查看博客详情 4.评论博客&#xff0c; 5.…

HBase在表操作--显示中文

启动HBase后&#xff0c;Master和RegionServer两个服务器&#xff0c;分别对应进程为HMaster和HRegionServe。&#xff08;可通过jps查看&#xff09; 1.进入表操作 hbase shell 2.查看当前库中存在的表 list 3.查看表中数据&#xff08;注&#xff1a;学习期间可用&#…

将FastSAM中的TextPrompt迁移到MobileSAM中

本博文简单介绍了SAM、FastSAM与MobileSAM,主要关注于TextPrompt功能的使用。从性能上看MobileSAM是最实用的,但其没有提供TextPrompt功能,故而参考FastSAM中的实现,在MobileSAM中嵌入TextPrompt类。并将TextPrompt能力嵌入到MobileSAM官方项目提供的gradio.py部署代码中,…

【JVM】生产内存占用异常优化 (一)

记录一次 - 内存占用优化 某个导出&#xff0c;导出数据量过大总是导致OOM&#xff0c;但是根据需求&#xff0c;导出数据大小并没有那么大 按照导出数据的查询来看 SELECTg.inventory_code,g.visit_record_code,g.recovery_price AS transactionAmount FROM crm_goods g ...…

小迪安全41WEB 攻防-通用漏洞XMLXXE无回显DTD 实体伪协议代码审计

#知识点&#xff1a; 1、XML&XXE-原理&发现&利用&修复等 2、XML&XXE-黑盒模式下的发现与利用 3、XML&XXE-白盒模式下的审计与利用 4、XML&XXE-无回显&伪协议&产生层面 #思路点&#xff1a; 参考&#xff1a;https://www.cnblo…

Linux 块设备驱动

Linux 三大驱动分别是&#xff1a;字符设备驱动、块设备驱动、网络设备驱动。 块设备是针对存储设备的&#xff0c;比如 SD 卡、EMMC、NAND Flash、Nor Flash、SPI Flash、机械硬盘、固态硬盘等。因此块设备驱动其实就是这些存储设备驱动&#xff0c;块设备驱动相比字符设备驱…

CentOS 7 编译安装 Git

CentOS 7 编译安装 Git 背景来源删除旧版本 Git安装依赖包下载 Git 源代码检验相关依赖&#xff0c;设置安装路径编译安装添加 Git 环境变量重新加载配置文件查看版本号参考文献 背景来源 为什么要安装新版本呢&#xff1f; 因为无聊&#xff0c;哈哈哈&#xff0c;其实也不是…

Linux下进程的调度与切换

&#x1f30e;进程的调度与切换 文章目录&#xff1a; 进程的调度与切换 进程切换 进程调度       活动状态进程队列       位图判断       过期队列 总结 前言&#xff1a; 在Linux操作系统中&#xff0c;进程的调度与切换是操作系统核心功能之一&#xff…

【JACS】:用于稳定单原子分散的催化剂架构可对吸附到 Pt 原子、氧化 Pt 簇和 TiO2上金属 Pt 簇的 CO 进行特定位点光谱和反应性测量

摘要&#xff1a;氧化物负载的贵金属纳米粒子是广泛使用的工业催化剂。由于费用和稀有性&#xff0c;开发降低贵金属纳米颗粒尺寸并稳定分散物质的合成方案至关重要。负载型原子分散的单贵金属原子代表了最有效的金属利用几何结构&#xff0c;尽管由于合成均匀且稳定的单原子分…

《论文阅读》E-CORE:情感相关性增强的移情对话生成 EMNLP 2023

《论文阅读》E-CORE:情感相关性增强的移情对话生成 EMNLP 2023 前言摘要模型架构图构建边的构建和初始化节点的初始化图更新情感相关性加强解码损失函数总结前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来…