建德网站优化公司,上饶网站开发,抖音服务商,从化五屏网站建设文章目录 launchctl 是什么Unix / Linux类似的工具有什么哪个更常用配置使用常用子命令示例加载一个 launch agent:卸载一个 launch daemon:列出所有已加载的服务:启动一个服务:停止一个服务:禁用一个服务:启用一个服务: 附com.example.myagent.plist内容有趣的例子参考 launch… 文章目录 launchctl 是什么Unix / Linux类似的工具有什么哪个更常用配置使用常用子命令示例加载一个 launch agent:卸载一个 launch daemon:列出所有已加载的服务:启动一个服务:停止一个服务:禁用一个服务:启用一个服务: 附com.example.myagent.plist内容有趣的例子参考 launchctl 是什么
launchctl 是 macOS 操作系统中的一个命令行工具它用于与 launchd 守护进程进行交互。launchd 是 macOS 的服务管理框架负责启动、停止和管理系统级和用户级的守护进程、应用程序、脚本和其他进程。launchctl 可以用于加载、卸载、启动、停止和管理这些进程的配置文件这些配置文件通常称为 “launch agents”用户级别和 “launch daemons”系统级别并以 .plistProperty 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 Listplist的格式。以下是一个示例 .plist 文件的内容它配置了一个每10秒运行一次的示例任务
?xml version1.0 encodingUTF-8?
!DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd
plist version1.0
dict!-- Label for the job --keyLabel/keystringcom.example.myagent/string!-- Program to execute --keyProgramArguments/keyarraystring/usr/bin/say/stringstringHello, world!/string/array!-- Run at load --keyRunAtLoad/keytrue/!-- Keep the job alive, always run it --keyKeepAlive/keyfalse/!-- StartInterval in seconds --keyStartInterval/keyinteger10/integer!-- Environment variables --keyEnvironmentVariables/keydictkeyPATH/keystring/usr/bin:/bin:/usr/sbin:/sbin/string/dict!-- Standard output and error paths --keyStandardOutPath/keystring/tmp/com.example.myagent.out/stringkeyStandardErrorPath/keystring/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 version1.0 encodingUTF-8?
!DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd
plist version1.0
dictkeyLabel/keystringcom.user.encouragement/stringkeyProgramArguments/keyarraystring/usr/bin/say/stringstringRemember, you are awesome!/string/arraykeyRunAtLoad/keyfalse/keyStartCalendarInterval/keydictkeyHour/keyinteger9/integerkeyMinute/keyinteger30/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