问题标签 [launchctl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
131 浏览

ios - launchd - pList Launchdaemon 不启动脚本

以前我可以在 iOS 9.3.3 上使用 Launchdaemons,但现在我在 iOS 11.3.1 上,我用来自动运行脚本的方法不再适用于我的 iPhone,我不明白为什么。我在 unc0ver 3.8.0-b1 上越狱,越狱时的日志显示服务已加载。

我的 plist 文件如下所示:

launchctl load /Library/LaunchDaemons/autoCleaner.plist 表示该服务已经在运行,但它没有执行脚本(在 script1.sh 的权限中设置了执行标志)。我可以从终端窗口很好地运行脚本,但它不会像我尝试使用启动守护程序那样以 20 秒的间隔启动和重新运行

任何想法如何解决?

0 投票
0 回答
202 浏览

zsh - OSX launchctl ZSH Shell 脚本不等待外部程序完成

我已经安装了 speedtest.net CLI 并编写了一个简单的 ZSH shell 脚本来运行 speedtest 二进制文件并生成 CSV 输出。

希望每隔 [时间段](最初是每小时)运行一次此脚本,并将速度测试数据收集到日志文件中以供以后分析。在阅读了 Mac 上的 cron 与 launchctl 之后,我决定为我的脚本创建一个原生的 launchctl plist 代理,并将其设置为 [在指定时间段] 运行脚本。

该脚本在独立于launchctl运行时运行成功;但是,当 lauchctl 运行脚本时,它不会等待对 speedtest 二进制文件的外部调用完成,而是直接跳转到最终的 echo 语句。输出文件成功附加了时间和日期,但缺少 speedtest 二进制文件的输出。

我尝试过睡眠、等待和循环来检查 PID ID(我相信在 $! 变量中找到),但同样的事情发生了。所以真的需要一些帮助来了解正在发生的事情以及如何解决它。

PLIST LaunchAgent

ZSH Shell 脚本

仅供参考 - 我发现这个网站对了解 launchctl 的工作方式非常有帮助 - https://www.launchd.info/和启动控制工具的试用版,以检查我所做的工作是否正常https://www.soma-zone .com/LaunchControl/

0 投票
0 回答
103 浏览

macos - 尝试在启动 OSX 时运行脚本

我正在尝试在 OSX 上完成启动时运行脚本。我尝试在网上的各种文章和问题之后创建一个 plist 文件,一些来自这里,一些来自媒体和其他地方。但我似乎无法做到正确。我希望脚本在计算机启动时运行,无论哪个用户登录。该脚本是一个简单的 bash 脚本,它检查 S3 存储桶中是否存在对象,如果该对象存在,它会继续运行,然后显然运行脚本的其余部分(在本例中为清理脚本)。

这是我的 plist 文件:

这是我要调用的脚本:

编辑:我错过了包含以下内容的错误日志: /bin/zsh: can't open input file: /Users/mlove/Documents/gitpersonal/ejector-seat/cleanup

我尝试制作脚本 777 只是为了测试但仍然出现错误,如果我通过简单地手动运行脚本./cleanup运行良好,所以我知道脚本本身没问题,所以我认为这与方式有关我在 plist 文件中调用它。

我肯定错过了一些简单的东西,任何帮助将不胜感激!

0 投票
2 回答
265 浏览

python - 从launchctl运行python脚本时Mac找不到chromedriver

我一直在尝试通过launchctl 安排我的一个python 脚本,但遇到了一个错误。目的是在每小时的给定时间运行。

我已经创建了我的 plist,将其加载到 launchctl 但它无法正常工作。在进行了一些挖掘之后,我调试并收到以下错误消息: Traceback (last recent call last): File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/ common/service.py",第 72 行,在 start self.process = subprocess.Popen(cmd, env=self.env, File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/subprocess .py”,第 854 行,在init self._execute_child(args,可执行文件,preexec_fn,close_fds,文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/subprocess.py”,第 1702 行,在 _execute_child raise child_exception_type(errno_num, err_msg, err_filename) FileNotFoundError: [Errno 2] No such file or directory:

在处理上述异常的过程中,又出现了一个异常:

回溯(最后一次调用):文件“/Users/petersmith/Documents/Python/thenewsproject/link_getters/link_getter.py”,第 3 行,在 import myfile 文件“ /Users/directories/myfile.py ”,第 51 行,在browser = webdriver.Chrome('chromedriver', options=chrome_options)
文件 "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/chrome/webdriver.py",第 73 行,在init self.service.start() 文件“/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/common/service.py”中,第 81 行,在开始引发 WebDriverException(selenium.common.exceptions.WebDriverException:消息:“chromedriver”可执行文件需要在 PATH 中。请参见https://sites.google.com/a/chromium.org/chromedriver/home

我在粘贴时以粗体更新了项目。

这是它大惊小怪的那一行: browser = webdriver.Chrome('chromedriver', options=chrome_options)

现在,chromedriver 位于我的 usr/local/bin 文件夹中,我检查了我的路径文件并查看: -bash: /Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/mysql/bin: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Frameworks/Mono.framework/Versions/ _当前/命令:/应用程序/Xamarin:没有这样的文件或目录

你可以用粗体看到它就在那里,所以我有点迷路了。

有任何想法吗?

0 投票
1 回答
39 浏览

bash - Launchctl 不启动 netcat shell

我有一个如图所示的脚本保存到文件/Users/yulkytulky/Library/demo/demo:

并创建了一个 LaunchAgent plist 文件,以便 shell 像这样自动运行:

但是,当我听的时候没有产生任何外壳。

我测试了将脚本更改为

它奏效了!(每 5 秒打个招呼)

为什么当我尝试运行 netcat 时它不起作用?

注意:我知道脚本是可执行的。我什至可以从 plist 文件中复制脚本的路径,将其粘贴到终端中,它可以按预期工作。

0 投票
1 回答
130 浏览

macos - OSX 和 launchctl,rsync/ssh 找不到密钥

所以我一直在尝试为 rsync 编写一个 launchctl 守护进程,以便它每晚远程备份我的笔记本电脑。

launchctl 守护进程运行良好,它使用 root 用户调用 rsync,并指示 rsync 使用 ssh,并从我的用户目录中获取密钥文件。这就是有趣的地方。无论我做什么,ssh 都会抛出以下错误:rsync: Failed to exec ssh -i /Users/anthony/.ssh/id_rsa: No such file or directory (2)

钥匙确实在那里。如果我从命令行单独调用 ssh,我可以从我的用户帐户和 root 帐户中使用该密钥。我假设这与launchctl的范围或特权有关?下面是 launchctl 正在使用的 plist 文件。我真的很感激这方面的一些帮助。

这是来自 remote_backup_test 的标准错误

0 投票
1 回答
345 浏览

macos - Mac 守护进程无法运行 bash 脚本

操作系统MacOS 10.15.17 (Catalina)

我想创建一个脚本,该脚本使用iperf启动一个客户端,该客户端每隔几秒测量一次连接速度并持续很长一段时间。我创建了一个守护程序文件并将其放入~/Library/LaunchAgents/com.myself.iperfclient.plist.

com.myself.iperfclient.plist

网速

netspeed文件对任何人都是可执行的:

当我尝试添加新的守护程序时,使用launchctl load ~/Library/LaunchAgents/com.myself.iperfclient.plist,这是我在控制台中收到的错误消息:

如果在我添加为第一项.plist的守护程序描述符中,则没有错误。但是,我不想以这种方式运行脚本,因为它每次都会启动一个新的终端窗口,这非常烦人。<string>open</string>ProgramArguments

我的问题

如何允许我的守护进程执行netspeed

附言

launchctl 状态码是126

0 投票
0 回答
41 浏览

macos - 使用 launchctl 2,如何从已经在 macOS >= 10.10 上运行的服务推断域?

launchctl2 采用指示目标域的说明符。根据命令手册,该说明符可以采用以下形式之一:

  • system/[service-name]
  • user/<uid>/[service-name]
  • login/<asid>/[service-name]
  • gui/<uid>/[service-name]
  • pid/<pid>/[service-name]

launchctl list命令现在已被该命令弃用并替换(我猜)launchctl print。后者需要域目标或服务目标作为输入。

  1. 是只有这五个域,还是可以有更多?
  2. 如果是,我如何列出我系统中的所有域?
  3. 如何从已经运行的服务推断域?
0 投票
0 回答
44 浏览

timer - 可以在launchctl中随机化StartInterval吗?

我使用 launchctl 每 8 小时运行一次作业(StartInterval = 28800)。在这项工作的 .plist 中,是否可以让它选择 6 - 10 小时之间的随机时间间隔(StartInterval 是 21600 和 36000 之间的随机数)?

0 投票
0 回答
59 浏览

macos - Mac-launchctl load 后服务未在启动时启动

在我的 mac1.metal ec2 实例上。我在 ~/Library/LaunchAgents 有一个 plist

该服务将在运行后运行

我可以看到它com.buildkite.buildkite-agent

但是当我重新启动实例时,服务不会重新启动。我认为launchctl load应该实现这一点?