标签: launchd

OS X:如何创建一个安装程序 .pkg,将一个 launchd plist 设置为 root,另一个设置为当前用户?

我需要在 OS X 上创建一个程序包安装程序,用于处理两个已启动守护进程的安装:一个以 root 身份运行,另一个以当前用户身份运行。虽然这仅适用于非常小的内部部署,但我无法保证当前用户名是什么。我怎样才能:

  • 确保后者在 launchd plist 文件中设置了正确的用户名?

或者

  • 确保每一项都通过正确调用 launchctl 进行设置,一项使用“sudo”,一项不使用“sudo”?

macos launchd package

5
推荐指数
1
解决办法
2624
查看次数

如何指示 launchd 等待卷安装?

操作系统 X、10.8.x

我们使用 launchd plist 文件(在 /Library/LaunchDaemons 中)在计算机启动时启动服务器应用程序。如果要启动的应用程序不在系统卷上,而是在另一个内部卷上,则该磁盘并不总是及时安装,并且作业每 10 秒重新生成一次。

有什么方法可以等待该文件系统对象变得可用吗?(或许 ?)

谢谢,阿科斯

macos launchd

5
推荐指数
1
解决办法
2342
查看次数

在 bash 脚本中重试命令行,直到成功,然后继续执行脚本

希望有人知道这个问题,我可以回答我的另一个问题。Launchagent 尝试过快地加载我的脚本,因此失败 - 我已将其 Nice 设置为 20,并将其他所有内容设置为最后,但在创建帐户时仍然太快。

cliclick如果系统未作为未知命令正确登录,该脚本将调用失败。所以,我的想法是这样的。

在脚本运行开始时cliclick -h显示帮助菜单。如果未知命令失败,请继续重复,直到成功为止,然后继续执行脚本的其余部分。

这是一种确保脚本在用户到达桌面之前不会运行的肮脏方法,我想不出更好的方法,但我也不知道如何实现它 - 所以 bash 脚本专家,我该如何实现循环cliclick -h直到成功然后继续脚本的其余部分?

macos bash shell scripting launchd

5
推荐指数
2
解决办法
5496
查看次数

如何创建只运行一次的启动代理?

由于launchdplist 格式中没有“Year”参数,如何创建一个只运行一次而不是一年一次的代理?

macos launchd

5
推荐指数
1
解决办法
2643
查看次数

什么是 CFErrorDomainLaunchd 错误 2?

我在任何标题中都找不到 CFErrorDomainLaunchd。我使用 find 命令来 grep 10.11 SDK 中的每个头文件。

我也试过谷歌:

site:opensource.apple.com CFErrorDomainLaunchd
Run Code Online (Sandbox Code Playgroud)

当我尝试安装我的助手应用程序及其启动 plist 时,SMJobBless 将错误传回。

我很困惑,因为昨天的安装工作得很好。我在此决定比现在更频繁地检查我的代码。

Boolean             success;
CFErrorRef          error;

success = SMJobBless(
    kSMDomainSystemLaunchd,
    CFSTR("com.frescologic.FL2000.Uninstaller.UninstallerHelper"),
    self->_authRef,
    &error );     <-- This is CFErrorDomainLaunchd error 2
Run Code Online (Sandbox Code Playgroud)

我永远欠你的债。

我正在开发 - 或试图开发 - 驱动程序的卸载程序。它还将卸载用户空间程序以及 OS X 用于启动或停止该用户空间程序的 LaunchAgent plist。

macos drivers launchd

5
推荐指数
1
解决办法
2393
查看次数

将 systemd 服务脚本转换为 launchd 服务脚本

我有一个 systemd 服务脚本,我想将其转换为 launchd 服务脚本以用于 macOS。我该如何处理这个问题?

macos launchd systemd

5
推荐指数
0
解决办法
286
查看次数

IHostLifetime 是否有 MacOS(启动)实现?

Microsoft 已经定义了IHostLifetimeWorkerServices 在不同平台上作为服务运行的接口。(您可以dotnet new worker在控制台中创建一个 Worker Service 项目)。

如果你想运行它们的系统服务,您可以使用微软的扩展systemd和Windows服务(见的NuGet Windows服务Systemd)。

是否已经有针对 MacOS 的实现(例如 launchd),或者如果我也想通过我的服务支持 MacOS,我是否需要为自己实现?


另见https://github.com/dotnet/core/blob/58b0c128d2672bada008d6e2b9e5b29ae70c2c4c/release-notes/3.0/api-diff/Asp.Net/3.0.0_Microsoft.Extensions.Hosting.Systemd.md

https://levelup.gitconnected.com/net-core-worker-service-as-windows-service-or-linux-daemons-a9579a540b77

c# windows-services launchd systemd asp.net-core

5
推荐指数
0
解决办法
264
查看次数

使用Cocoa计划任务?

Cocoa(和Mac OS X)中安排程序运行的最佳方法是什么:

  • 当用户登录时
  • 在一天中的某些时间(例如:中午12:00).
  • 在某些时间间隔(例如:每两个小时).

除了调度之外,如果用户删除应用程序,也应该很容易取消调度程序并且不会导致错误.

本质上,该程序是一个卫星命令行可执行文件,放在同一个.app包中的主应用程序文件旁边.该程序的目的是在用户的主目录(内部~/Library/Application Support/MyApp)中进行一些后台数据更新.

这是crontab一个很好的候选人吗?该man页面crontab表示该功能已被吸收launchctl,但我似乎无法找到如何安排特定时间来运行该实用程序.

谢谢.

macos cocoa crontab scheduled-tasks launchd

4
推荐指数
1
解决办法
1596
查看次数

使用launchd在OS X上启动git-daemon

我正在尝试使用我的OS X桌面设置内部git服务器(主要作为测试用例).当涉及SSH密钥时,一切正常,但我目前正在尝试使用git-daemon进行只读克隆.如果我在终端中启动git-daemon:

sudo -u git git-daemon --basepath=/Users/git/repos/ --export-all
Run Code Online (Sandbox Code Playgroud)

然后一切正常,例如

git clone git://localhost/My_Project.git
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用launchd进行设置时,它会拒绝所有请求.我正在使用这个plist文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Label</key>
        <string>git</string>
        <key>UserName</key>
        <string>git</string>
        <key>OnDemand</key>
        <false/>
        <key>ProgramArguments</key>
        <array>
                <string>/path/to/git-daemon</string>
                <string>--base-path=/Users/git/repos/</string>
                <string>--export-all</string>
        </array>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

如果我尝试克隆My_Project,则会收到以下错误:

Cloning into My_Project...
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)

令人沮丧的是,我相信这曾经有用,所以问题可能与我的plist文件或者launchd的使用关系不大,而且更多的是做任何可能已经改变的网络设置.任何建议将不胜感激.

抱歉,如果这更像是一个系统管理员问题,但我认为开发人员可能会有一些经验.

更新:如果存在repo,控制台将报告以下错误:

git[431]
error: cannot run upload-pack: No such file or directory
Run Code Online (Sandbox Code Playgroud)

git macos launchd git-daemon

4
推荐指数
1
解决办法
3181
查看次数

launchd执行python脚本,但导入失败

我使用appscript编写了一个python脚本来跟踪我当前活动的窗口.我通过launchd运行它,但是当我这样做时它无法导入appscript.我已将plY中的PYTHONPATH设置为launchd,但我认为launchd不是在site-packages中读取.pth文件.有没有办法让它做到这一点?

我的脚本在这里:https://github.com/katylava/macwintracker

这是推出的plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>label</key>
    <string>com.katylavallee.wintracker</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/kyl/Library/Application Support/com.katylavallee.wintracker/wintracker.py</string>
        <string>1</string>
        <string>1</string>
    </array>
    <key>Environment Variables</key>
    <dict>
      <key>PYTHONPATH</key>
      <string>/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages</string>
    </dict>
    <key>StandardErrorPath</key>
    <string>/Users/kyl/Library/Logs/com.katylavallee.wintracker/wintracker_err.log</string>
    <key>StandardOutPath</key>
    <string>/Users/kyl/Library/Logs/com.katylavallee.wintracker/wintracker.log</string>
    <key>StartInterval</key>
    <integer>3</integer>
  </dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

而错误:

Traceback (most recent call last):
  File "/Users/kyl/Library/Application Support/com.katylavallee.wintracker/wintracker.py", line 5, in <module>
    from appscript import app, its
ImportError: No module named appscript
Run Code Online (Sandbox Code Playgroud)

python脚本从命令行运行良好.

python launchd

4
推荐指数
1
解决办法
2263
查看次数