windows7怎么做網(wǎng)站服務器新聞式軟文
文章目錄
- launchctl 是什么
- Unix / Linux類似的工具有什么
- 哪個更常用
- 配置
- 使用
- 常用子命令
- 示例
- 加載一個 launch agent:
- 卸載一個 launch daemon:
- 列出所有已加載的服務:
- 啟動一個服務:
- 停止一個服務:
- 禁用一個服務:
- 啟用一個服務:
- 附com.example.myagent.plist內(nèi)容
- 有趣的例子
- 參考
launchctl 是什么
launchctl 是 macOS 操作系統(tǒng)中的一個命令行工具,它用于與 launchd 守護進程進行交互。launchd 是 macOS 的服務管理框架,負責啟動、停止和管理系統(tǒng)級和用戶級的守護進程、應用程序、腳本和其他進程。launchctl 可以用于加載、卸載、啟動、停止和管理這些進程的配置文件,這些配置文件通常稱為 “l(fā)aunch agents”(用戶級別)和 “l(fā)aunch daemons”(系統(tǒng)級別),并以 .plist(Property List)文件格式存儲。
Unix / Linux類似的工具有什么
在 Unix/Linux 系統(tǒng)上與 macOS 的 launchctl 命令類似的工具和服務管理框架主要有以下幾個:
-
Systemd (systemctl)
systemd 是現(xiàn)代 Linux 發(fā)行版中廣泛使用的系統(tǒng)和服務管理器,替代了傳統(tǒng)的 System V init 系統(tǒng)。與 launchctl 類似,systemd 使用 systemctl 命令來管理服務,包括啟動、停止、重啟、啟用和禁用服務。服務配置通常通過位于 /etc/systemd/system/ 或 /usr/lib/systemd/system/ 的 .service 文件來定義。 -
Upstart (initctl)
在 systemd 出現(xiàn)之前,Upstart 是某些 Linux 發(fā)行版(如早期的 Ubuntu 版本)使用的替代 init 系統(tǒng)。它提供 initctl 命令來管理服務。雖然 Upstart 目前已經(jīng)被許多發(fā)行版淘汰,但仍可能在一些較舊的系統(tǒng)中找到。 -
SysVinit (/etc/init.d scripts)
SysVinit 是早期 Unix 和 Linux 系統(tǒng)使用的傳統(tǒng)初始化系統(tǒng)。它使用腳本位于 /etc/init.d/ 的目錄來啟動和停止系統(tǒng)服務。雖然現(xiàn)代發(fā)行版已經(jīng)轉(zhuǎn)向 systemd,但某些系統(tǒng)仍然支持 SysVinit 腳本,或者提供與 systemd 的兼容層。 -
Cron (crontab)
對于定時任務,cron 是 Unix/Linux 系統(tǒng)上的傳統(tǒng)工具。它不是服務管理器,但可以定時運行任務。用戶可以通過 crontab 命令來編輯個人的定時任務列表,系統(tǒng)級的 cron 任務則配置在 /etc/cron.* 目錄下。
每個工具和框架都有其獨特的特點和用法,但它們的基本功能——確保在指定的時間或條件下運行或停止程序和腳本——和 launchctl 類似。隨著 Linux 發(fā)行版向 systemd 遷移,systemctl 已成為服務管理的事實標準。
哪個更常用
在現(xiàn)代 Linux 發(fā)行版中,systemd(及其工具 systemctl)是最常用的服務管理和初始化系統(tǒng)。自從它于 2010 年引入以來,systemd 已經(jīng)取代了傳統(tǒng)的 SysVinit 和 Upstart,并且被許多主流 Linux 發(fā)行版采用,包括:
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 提供了對系統(tǒng)服務的集中管理,它不僅僅用于啟動和停止服務,還管理系統(tǒng)啟動過程、掛載點、定時任務(替代 cron)、日志記錄(通過 journald)等。systemctl 命令是與 systemd 交互的主要方式,它允許你啟動和停止服務、查看服務狀態(tài)、啟用和禁用服務的自動啟動等。
SysVinit 仍然在一些較舊的系統(tǒng)或特定的環(huán)境中被使用,尤其是在那些對 systemd 的復雜性和特性有所保留的情況下。
cron 在定時任務方面也依然非常普及,盡管 systemd 提供了定時器(timers)功能來替代它,但許多系統(tǒng)管理員和用戶出于習慣或者對 cron 熟悉程度的考慮,依然選擇使用 cron。
在 macOS 系統(tǒng)中,launchctl 與 launchd 結(jié)合,仍然是管理守護進程、應用程序和其他自動啟動任務的標準工具,沒有直接的 Linux 對應物。
綜上所述,在 Linux 環(huán)境中,systemd 和 systemctl 目前是最常用的,而在 macOS 上,則是 launchctl。
配置
launchd 通過 .plist 配置文件來管理任務。這些文件通常位于以下目錄:
- /System/Library/LaunchDaemons/:存放系統(tǒng)級守護進程配置文件,由系統(tǒng)所有者或管理員管理。
- /Library/LaunchDaemons/:存放第三方應用程序的系統(tǒng)級守護進程配置文件。
- /System/Library/LaunchAgents/:存放系統(tǒng)級代理配置文件。
- /Library/LaunchAgents/:存放第三方應用程序的用戶級代理配置文件。
- ~/Library/LaunchAgents/:存放用戶級代理配置文件,只影響當前用戶。
.plist 文件包含了用于描述服務的鍵值對,例如要執(zhí)行的命令、啟動條件、環(huán)境變量等。
使用
launchctl 的基本使用語法如下:
- launchctl <subcommand> …
<subcommand> 是指定給 launchctl 的子命令,用于執(zhí)行各種操作,如 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
這將卸載系統(tǒng)級別的 com.example.mydaemon 服務。注意,對于系統(tǒng)級別的操作通常需要 sudo。
列出所有已加載的服務:
launchctl list
使用這個命令可以查看所有當前由 launchd 管理的服務。
啟動一個服務:
launchctl start com.example.myagent
如果 com.example.myagent 已經(jīng)加載,這個命令會啟動它。
停止一個服務:
launchctl stop com.example.myagent
這將停止 com.example.myagent 服務。
禁用一個服務:
sudo launchctl disable system/com.example.mydaemon
禁用名為 com.example.mydaemon 的系統(tǒng)級服務。
啟用一個服務:
launchctl enable user/<UID>/com.example.myagent
啟用某個用戶(UID 指定)的 com.example.myagent 服務。
隨著 macOS 版本的更新,launchctl 的命令和語法可能發(fā)生變化。因此,建議查看系統(tǒng)中的 man launchctl 手冊頁面或官方 Apple 開發(fā)者文檔以獲取最新的使用信息和命令格式。
附com.example.myagent.plist內(nèi)容
一個典型的 com.example.myagent.plist 文件,包含了 launchd 服務所需的配置信息。它通常以 XML 格式定義,并且遵循 Property List(plist)的格式。以下是一個示例 .plist 文件的內(nèi)容,它配置了一個每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: 要執(zhí)行的命令和參數(shù),這里的例子是使用 /usr/bin/say 命令讓系統(tǒng)朗讀一段文本。
- RunAtLoad: 是否在加載 .plist 文件時立即運行服務(這里是 true)。
- KeepAlive: 服務是否應該保持運行,這里設置為 false。
- StartInterval: 服務運行的間隔,單位為秒。這里設置為每10秒運行一次。
- EnvironmentVariables: 在運行服務時要使用的環(huán)境變量。
- StandardOutPath 和 StandardErrorPath: 服務的標準輸出和錯誤輸出將被重定向到的文件路徑。
請注意,上述 .plist 文件只是一個簡單例子,用于演示如何定義一個定時運行的任務。在實際情況中,你可能需要根據(jù)需要配置更為復雜的任務,并且安全地存儲日志和輸出。
為了使用該服務,你需要將這個 .plist 文件放置在合適的位置,通常是 ~/Library/LaunchAgents/,然后使用 launchctl 加載它。記得根據(jù)你的 macOS 版本檢查 launchctl 的具體使用方法,因為命令和語法可能會有所不同。
有趣的例子
讓我們創(chuàng)建一個有趣的 launchctl 例子,我們將設置一個簡單的 launch agent 任務,它將每天在指定的時間用 macOS 的語音合成功能朗讀一句鼓勵的話或者笑話。這樣,每天在一個固定的時間,你的電腦就會給你一些積極的能量或一個笑容。
首先,你需要創(chuàng)建一個 .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 指定了要執(zhí)行的命令,這里是 say 命令,后面跟著要朗讀的句子 “Remember, you are awesome!”。RunAtLoad 設置為 false,表示不會在加載時執(zhí)行。StartCalendarInterval 設置了任務應當執(zhí)行的時間,這里是每天的早上 9:30。
保存了這個 .plist 文件之后,你可以使用以下 launchctl 命令來加載和啟動這個任務:
launchctl load ~/Library/LaunchAgents/com.user.encouragement.plist
為了確保這個任務在你的電腦重啟后繼續(xù)工作,你需要將它設為啟動時自動加載。因為我們已經(jīng)使用 launchctl load 命令加載了這個任務,它將在下一個登錄時自動啟動。
如果你想要測試看看這個任務是否按預期工作,可以手動觸發(fā):
launchctl start com.user.encouragement
這將立即執(zhí)行這個任務,你應該能聽到你的電腦用語音朗讀 “Remember, you are awesome!”。
如果你想卸載這個任務,可以使用:
launchctl unload ~/Library/LaunchAgents/com.user.encouragement.plist
這個小例子是一個簡單而又有趣的 launchctl 的應用,證明了你可以用它來給日常電腦使用帶來一些樂趣和積極的能量。
參考
Script management with launchd in Terminal on Mac