You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过launchd运行TypeScript脚本?已找到npx路径

解决launchd运行TypeScript脚本时找不到node的问题

问题分析

直接在终端执行/usr/local/bin/npx ts-node /path/to/script.ts可正常运行,但通过launchd的plist配置执行时,进程退出码为127,日志报错env: node: No such file or directory。核心原因是launchd的运行环境PATH变量与终端不同,导致npx无法定位到node的可执行文件路径。

解决方案

方案1:在plist中配置完整PATH环境变量

  1. 先通过type node命令获取node的绝对路径(例如/usr/local/bin/node或Apple Silicon Mac的/opt/homebrew/bin/node)
  2. 在plist中添加EnvironmentVariables键,确保PATH包含node所在目录:
<key>EnvironmentVariables</key>
<dict>
    <key>PATH</key>
    <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
    <!-- Apple Silicon设备请改为:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin -->
</dict>

完整plist示例:

<?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.your.script.identifier</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/npx</string>
        <string>ts-node</string>
        <string>/path/to/script.ts</string>
    </array>
    <key>EnvironmentVariables</key>
    <dict>
        <key>PATH</key>
        <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
    </dict>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardOutPath</key>
    <string>/var/log/script-output.log</string>
    <key>StandardErrorPath</key>
    <string>/var/log/script-error.log</string>
</dict>
</plist>

方案2:通过npx的--node-path参数指定node路径

直接在ProgramArguments中添加参数,明确指定node的绝对路径:

<key>ProgramArguments</key>
<array>
    <string>/usr/local/bin/npx</string>
    <string>--node-path</string>
    <string>/usr/local/bin/node</string> <!-- 替换为你的node实际路径 -->
    <string>ts-node</string>
    <string>/path/to/script.ts</string>
</array>

方案3:直接用node启动ts-node

  1. 通过type ts-node获取ts-node的绝对路径(例如/usr/local/bin/ts-node)
  2. 直接用node的绝对路径运行ts-node:
<key>ProgramArguments</key>
<array>
    <string>/usr/local/bin/node</string>
    <string>/usr/local/bin/ts-node</string>
    <string>/path/to/script.ts</string>
</array>

验证配置

修改plist后,执行以下命令重新加载并验证:

# 卸载已加载的配置(如果存在)
launchctl unload ~/Library/LaunchAgents/com.your.script.identifier.plist
# 加载新配置
launchctl load ~/Library/LaunchAgents/com.your.script.identifier.plist
# 查看进程状态
launchctl list | grep com.your.script.identifier

内容的提问来源于stack exchange,提问作者Ben Robinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 11:46:28