我想用 launchd 管理一个一个可执行 bin 文件的进程, 所以写了一个 plist 来运行该可执行文件
问题是始终会碰到一个问题, 就是该可执行文件无法访问我放在 Documents 里的配置文件导致无法运行, launchd 日志提示shell-init: error retrieving current directory: getcwd: cannot access parent directories: Operation not permitted
我怀疑是 macOS 的沙箱机制导致的, 在安全与隐私里给了该可执行文件全盘访问不好使, 我把配置文件移到 Downloads 里也不行, 现在有点头疼.
您可以尝试使用 launchd 的配置参数来改变程序所在的工作目录,这样就可以让程序访问磁盘文件了。
具体做法是在 launchd.plist 中添加一个 key WorkingDirectory
,将它的 value 设置为程序需要访问的文件目录,例如:
<key>WorkingDirectory</key>
<string>/Users/username/Documents</string>
这样 launchd 就会将该程序的工作目录切换到 /Users/username/Documents
,使它能够顺利访问该目录下的文件。
如果还有其他问题,建议您尝试运行该程序时在终端中输入 sudo ./your_program
,看看是否可以正常运行和访问文件。如果该方法可行,那么问题就在于权限不足,您需要查找相关的权限设置来解决。