我使用 Dropbox 将文件同步到我的网站,该网站运行在 Mac OS X Mountain Lion 上。问题是,如果我没有登录,Dropbox 就不会运行,因此,我在另一台链接到 Dropbox 的计算机上对我的网站所做的任何更改,网站都不会更新。
我尝试通过让 Dropbox 在启动时作为守护进程运行来解决问题。我使用 UserName 键在 /Library/LaunchDaemons 中创建了一个 launchd 条目,以我自己的身份运行 Dropbox,它启动了,但没有任何更新。当我将 Dropbox 可执行文件的输出重定向到文件时,我看到以下错误,虽然我并不认为这是致命的,但我仍然在进程列表中看到 Dropbox。
/Applications/Dropbox.app/Contents/Resources/lib/python2.7/lib-ol_RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.
2013-09-15 17:42:20.592 Dropbox[267:707] Unable to simultaneously satisfy constraints:
(
<NSLayoutConstraint:0x5636c30 H:[_NSAlertContentView:0x56319e0(<=0)]>,
<NSLayoutConstraint:0x5636b70 H:[_NSAlertContentView:0x56319e0(>=420)]>
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x5636c30 H:[_NSAlertContentView:0x56319e0(<=0)]>
Set the NSUserDefault NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints to YES to have -[NSWindow visualizeConstraints:] automatically called when this happens. And/or, break on objc_exception_throw to catch this in the debugger.
2013-09-15 17:42:20.593 Dropbox[267:707] Unable to simultaneously satisfy constraints:
(
<NSLayoutConstraint:0x5637240 V:[_NSAlertContentView:0x56319e0(<=0)]>,
<NSLayoutConstraint:0x5637180 V:[_NSAlertContentView:0x56319e0(>=131)]>
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x5637240 V:[_NSAlertContentView:0x56319e0(<=0)]>
Set the NSUserDefault NSConstraintBasedLayoutVisualizeMutuallyExclusiveConstraints to YES to have -[NSWindow visualizeConstraints:] automatically called when this happens. And/or, break on objc_exception_throw to catch this in the debugger.
2013-09-15 17:42:20.612 Dropbox[267:707] Error (1000) creating CGSWindow on line 259
2013-09-15 17:42:20.614 Dropbox[267:707] (
0 CoreFoundation 0x98598e8b __raiseError + 219
1 libobjc.A.dylib 0x987e152e objc_exception_throw + 230
2 CoreFoundation 0x98598d21 -[NSException raise] + 17
3 _objc.so 0x02b30b2f PyObjCErr_ToObjCWithGILState + 63
4 _objc.so 0x02b11501 PyObjCFFI_BuildResult + 4673
5 _objc.so 0x02b0254f ffi_closure_SYSV_inner + 127
6 _objc.so 0x02b02352 ffi_closure_SYSV + 34
7 libobjc.A.dylib 0x987ee5d3 -[NSObject performSelector:withObject:] + 70
8 Foundation 0x90d9d326 __NSThreadPerformPerform + 395
9 CoreFoundation 0x9846f04f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
10 CoreFoundation 0x9846ea79 __CFRunLoopDoSources0 + 233
11 CoreFoundation 0x98494826 __CFRunLoopRun + 934
12 CoreFoundation 0x9849401a CFRunLoopRunSpecific + 378
13 CoreFoundation 0x98493e8b CFRunLoopRunInMode + 123
14 HIToolbox 0x9107af5a RunCurrentEventLoopInMode + 242
15 HIToolbox 0x9107acc9 ReceiveNextEventCommon + 374
16 HIToolbox 0x9107ab44 BlockUntilNextEventMatchingListInMode + 88
17 AppKit 0x9907693a _DPSNextEvent + 724
18 AppKit 0x9907616c -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 119
19 AppKit 0x9906c5cc -[NSApplication run] + 855
20 _objc.so 0x02b022ad ffi_call_SYSV + 29
21 _objc.so 0x02b025c9 ffi_call + 89
22 _objc.so 0x02b1b2e9 PyObjCFFI_Caller + 2809
23 _objc.so 0x02b4006a PyObjCSelector_GetClass + 698
24 Python 0x02209918 PyObject_Call + 88
25 Python 0x022be2cf PyEval_EvalFrameEx + 5663
26 Python 0x022c4571 PyEval_EvalCodeEx + 2081
27 Python 0x022c20d3 PyEval_EvalFrameEx + 21539
28 Python 0x022c4571 PyEval_EvalCodeEx + 2081
29 Python 0x022c20d3 PyEval_EvalFrameEx + 21539
30 Python 0x022c4571 PyEval_EvalCodeEx + 2081
31 Python 0x0223b3d2 PyClassMethod_New + 1138
32 Python 0x02209918 PyObject_Call + 88
33 Python 0x022bea8c PyEval_EvalFrameEx + 7644
34 Python 0x022c4571 PyEval_EvalCodeEx + 2081
35 Python 0x022c20d3 PyEval_EvalFrameEx + 21539
36 Python 0x022c2fb2 PyEval_EvalFrameEx + 25346
37 Python 0x022c2fb2 PyEval_EvalFrameEx + 25346
38 Python 0x022c2fb2 PyEval_EvalFrameEx + 25346
39 Python 0x022c4571 PyEval_EvalCodeEx + 2081
40 Python 0x022c46f7 PyEval_EvalCode + 87
41 Python 0x022e8fa5 PyRun_SimpleFileExFlags + 789
42 Python 0x022e90f8 PyRun_SimpleFile + 40
43 Dropbox 0x000067f1 start + 17777
44 Dropbox 0x00006f89 main + 1481
45 Dropbox 0x00002382 start + 258
46 Dropbox 0x000022a9 start + 41
`
答案1
似乎有很多工作需要完成,而这些工作可以通过在目标机器上运行 Mercurial/Git 来完成,无需登录。这样,您就可以获得源代码控制的额外优势。
答案2
这 ”在第 259 行创建 CGSWindow 时出错(1000)“显示内部 Python 应用程序需要某种形式的图形界面(可能是闪烁屏幕或菜单弹出)。默认情况下,LaunchAgents/Daemons 没有图形访问,甚至可能尚未激活。
从launchctl
手册页中:
目前已知的会话类型包括:Aqua、LoginWindow、Background、StandardIO 和 System。
在 launchd plist 文件中,尝试添加LimitLoadToSessionType
“Aqua”和“LoginWindow”会话类型的要求。
<key>LimitLoadToSessionType</key>
<array>
<string>LoginWindow</string>
<string>Aqua</string>
</array>
请注意,登录时应用程序可能会退出并重新启动。从Apple Daemon 技术说明:
如果您将 LimitLoadToSessionType 设置为数组,请注意代理的每个实例都会独立运行。例如,如果您将代理设置为在 LoginWindow 和 Aqua 中运行,系统将首先在 loginwindow 上下文中运行代理的一个实例。当用户登录时,该实例将被终止,第二个实例将在标准 GUI 上下文中启动。