标签: launch-daemon

使用Objective-C的Mac OS X守护进程 - launchd

我是Mac OS X世界的新手,但我有Windows开发技能.

我需要开发一个从Web服务上传/下载文件的守护进程(在Windows上将是Windows服务).

我的问题是:是否有可能创建一个用Objective-C编写的应用程序,它将成为守护进程(上传/下载)并在操作系统开始使用launchd时启动它?或者还有另一种创建守护进程的方法?

谢谢

macos objective-c launchd launch-daemon

11
推荐指数
1
解决办法
3229
查看次数

从KEXT到Daemon进行通信的最佳方式,并阻止从守护进程返回结果

在KEXT中,我通过vnode或文件范围监听器监听文件关闭.对于某些(极少数)文件,我需要将文件路径发送到我的系统守护程序,该守护程序执行一些处理(这必须在守护程序中发生)并将结果返回给KEXT.需要阻止文件关闭调用,直到我从守护程序获得响应.根据结果​​我需要在close调用中进行一些操作并成功返回close调用.论坛上有很多关于KEXT通信相关主题的讨论.但它们并不具有决定性,而且看起来很老(2002年左右).此要求可以由FtlSendMessage(...)Win32 API 处理.我在Mac上寻找相同的东西

以下是我所看到的并希望总结我的理解:

  1. Mach消息:使用具有排队机制的发送器和应答端口提供非常好的双向通信方式.但是,马赫消息的API(例如mach_msg,mach_port_allocate,bootstrap_look_up)并不显得关键绩效指标.mach_msg_send_from_kernel可以使用mach API ,但仅此一点对双向通信没有帮助.我的理解是对的吗?
  2. IOUserClient:这似乎更多地与从用户空间到KEXT的通信,然后从KEXT进行一些回调.我没有找到一种方法来启动从KEXT到守护进程的通信,然后等待来自守护进程的结果.我错过了什么吗?
  3. 套接字:这可能是最后一个选项,因为我必须实现从KEXT到守护进程的整个双向通信通道.
  4. ioctl/sysctl:我对他们了解不多.根据我的阅读,它不推荐使用,特别是对于双向通信
  5. RPC-Mig:我再也不太了解它们.从我所看到的看起来很复杂.不确定这是否是推荐方式.
  6. KUNCUserNotification:这似乎只是从KEXT向用户提供通知.它不符合我的要求.

支持的平台是(10.5以后).所以看看这个要求,有人可以建议并提供一些关于这个主题的指示吗?

提前致谢.

macos iokit kernel-extension launch-daemon mach

10
推荐指数
1
解决办法
3112
查看次数

使用terminal/bash更改目录中多个文件的文件扩展名?

我正在开发一个简单的launchdaemon,它将文件从一个目录复制到另一个目录.我已经把文件转移得很好了.

我只是希望目录中的文件是.mp3而不是.dat

一些文件看起来像这样:

6546785.8786.dat
3678685.9834.dat
4658679.4375.dat

我希望它们看起来像这样:

6546785.8786.mp3
3678685.9834.mp3
4658679.4375.mp3

这是我在bash脚本末尾重命名文件扩展名的内容.

cd $mp3_dir
mv *.dat *.mp3
exit 0
Run Code Online (Sandbox Code Playgroud)

问题是该文件是*.mp3而不是6546785.8786.mp3

当另一个6546785.8786.dat文件导入$ mp3_dir时,*.mp3将被新的.mp3覆盖

我需要重命名只是中的.dat文件扩展名.MP3并保持文件名.

想法?建议?

iphone bash terminal file-extension launch-daemon

8
推荐指数
2
解决办法
1万
查看次数

Mac启动守护程序在将其保存后无法从系统钥匙串中检索密码

我们有一个启动守护进程(必然由于各种原因)以root身份运行,并通过网络与服务器组件通信.它需要对服务进行身份验证,因此在首次获取密码时,我们会将其保存到系统密钥链中.在随后的发布中,我们的想法是从密钥链中检索密码并使用它来验证网络服务.

这一直运行良好,但在macOS 10.12上,现有代码停止工作,我们已经完全不知道如何解决这个问题.归结为:

无论我们是保存新密码还是检索旧密码,我们都会使用以下方法获取对系统密钥链的引用:

SecKeychainCopyDomainDefault(kSecPreferencesDomainSystem, &system_keychain);
Run Code Online (Sandbox Code Playgroud)

我们还禁用了用户交互以获得良好的衡量标准,尽管我们希望它在守护进程的上下文中已经关闭.

SecKeychainSetUserInteractionAllowed(false);
Run Code Online (Sandbox Code Playgroud)

将新密码保存到钥匙串时,我们会使用

OSStatus status = SecKeychainAddInternetPassword(
    system_keychain,
    urlLength, server_base_url,
    0, NULL,
    usernameLength, username,
    0, NULL,
    0,
    kSecProtocolTypeAny, kSecAuthenticationTypeAny,
    passwordLength, password,
    NULL);
Run Code Online (Sandbox Code Playgroud)

这很有用.报告成功,我可以在Keychain Access.app的"系统"钥匙串中看到该项目.

在我们的守护进程的后续运行中检索它是通过以下行完成的:

status = SecKeychainFindInternetPassword(
    system_keychain,
    urlLength, url,
    0, NULL,
    usernameLength, username,
    0, NULL,
    0,
    kSecProtocolTypeAny, kSecAuthenticationTypeAny,
    &passwordLength, &password_data,
    NULL);
Run Code Online (Sandbox Code Playgroud)

不幸的是,errSecAuthFailed由于我们不清楚的原因,这已经开始返回.

我们检查了一些额外的细节以及我们尝试过的东西,但无济于事:

  • 守护程序二进制文件使用Developer Id证书进行签名.
  • 守护程序二进制文件包含一个嵌入式Info.plist部分,其中包含一个包ID和版本.
  • 我可以在Keychain Access.app中密码项的"访问控制"选项卡中的"始终允许这些应用程序访问"列表中看到守护进程二进制文件.
  • 如果我在Keychain Access中手动切换到"允许所有应用程序访问此项",则可以正常工作.然而,这在某种程度上违背了在钥匙串中保存密码的观点.
  • 我们已经尝试过使用参数SecKeychainAddInternetPassword,但这似乎没有任何区别.
  • 我们已尝试使用明确解锁钥匙链SecKeychainUnlock(),但正如文档所示,这似乎是多余的.
  • 删除项Keychain Access.app原因SecKeychainFindInternetPassword()产生errSecItemNotFound,正如你所期望的.所以它绝对可以找到保存的项目,它不允许读取它.

钥匙串文档不是很容易阅读,而是部分相当重复.("为了做Y,你需要做Y",但没有提到为什么你想要做Y.)尽管如此,我认为我已经完成并理解了大部分内容.我们特定设置的各个方面都没有详细介绍(从守护程序访问),但似乎很清楚,访问以前由同一个应用程序保存的项目不需要任何特殊授权或身份验证.这与我们所看到的行为直接矛盾.

有任何想法吗?

macos keychain security-framework launchd launch-daemon

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

守护进程知道用户何时登录MAC

我有一个守护进程(用Obj C编写)运行,我想在一些用户登录时执行一些操作.守护进程是否可以知道特定用户何时登录或退出OSX?登录时是否会抛出任何通知?我想避免使用Log in Item或Launch Agent.而且我还想避免轮询定时器来检查登录用户.

macos cocoa launch-daemon

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

守护进程与python 3

我在python3中为Ubuntu编写了一个脚本,该脚本应该在所有X分钟内执行,并且应该在登录后自动启动.因此我想创建一个守护进程(这是正确的解决方案吗?)但我还没有找到任何模块/ python3的示例,仅适用于python 2.X. 你知道我能用的东西吗?

谢谢,

python daemon python-3.x launch-daemon

2
推荐指数
1
解决办法
3086
查看次数

在MAC OSX中启动守护进程

我写了一个守护进程是MAC OS 10.8.

我将Unix可执行文件复制到启动项.

我创建了一个.plist文件,其中Label,KeepAlive标志设置为YES,progrrammArguments数组的Item0设置为/ Libray/StartupItems/updaterDaemon.

我希望这个守护进程在系统启动时以root身份运行,因此我将其复制到startupItems中,但守护进程没有启动.

请告诉我我做错了什么或者我需要做什么才能在系统/机器启动时启动和运行这个守护进程.

提前致谢.

macos startup launch-daemon

2
推荐指数
1
解决办法
9308
查看次数

启动脚本osx启动守护程序

我正在尝试在启动时在我的机器上运行可执行文件(mbp retina osx mountain lion).

这是脚本的样子:

<?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.netresponsibility.daemon</string> 
    <key>ProgramArguments</key> 
    <array> 
        <string>/usr/bin/net-responsibility</string> 
        <string>--daemon</string> 
    </array> 
    <key>OnDemand</key> 
        <true/> 
</dict> 
</plist>
Run Code Online (Sandbox Code Playgroud)

我把它放在/ System/Library/LaunchDaemons /目录中.它的名称com.netresponsibility.daemon.plist和权限与其他所有权限相同.

-rw-r--r--  1 root  wheel  420 Oct 11 12:39 com.netresponsibility.daemon.plist
Run Code Online (Sandbox Code Playgroud)

当我重新启动时,不会调用可执行文件.关于我缺少什么的任何想法?

macos osx-lion launch-daemon

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