标签: daemon

java background/daemon/service跨平台最佳实践

我正在寻找在大多数平台(Windows,Mac OS,Linux [特别是Ubuntu])中使我的桌面java程序在后台(守护程序/服务?)运行的最佳方法.

通过"最佳方式",我希望找到一种方式:

  1. 需要少量的平台特定代码.
  2. 不要求用户做任何普通计算机用户不能/不会做的事情
  3. 不是资源匮乏.

我理解我的要求可能不切实际,但我希望这种情况有某种"最佳实践".

如何前进?

java daemon cross-platform desktop-application

27
推荐指数
3
解决办法
1万
查看次数

是否可以在共享托管环境中设置MongoDB?

我正在使用GoDaddy,并希望将MongoDB用于宠物项目.我不确定它是否可能,因为它必须运行守护进程,但是,问一下它是不是有害,有办法吗?

编辑:他们已经结束了这个问题,但如果有人在这篇文章中遇到同样的问题:

虽然您无法在传统的共享环境中设置MongoDB,但由于云的神奇之处,您现在可以在以下位置找到Free Mongo Hosting:

https://mongolab.com/welcome/

https://www.mongohq.com/home

https://manage.windowsazure.com(通过mongolab)

daemon mongodb

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

使用命令行参数作为后台进程运行Mac Chrome

我的.bash_profile文件中有2个别名,包含:

alias chrome="/Applications/Google\\ \\Chrome.app/Contents/MacOS/Google\\ \\Chrome"
alias chromex="chrome --disable-web-security"
Run Code Online (Sandbox Code Playgroud)

但是在运行时,它会打开Chrome但仍然保持终端窗口......一旦我关闭终端窗口,它也会关闭chrome.

有没有办法让它在后台运行?

我记得我用这个用于thinweb服务器thin start -d或者thin start --daemonize

谢谢


更新

除了詹姆斯回答,我还找到了nohup命令行,这使我可以退出终端而没有问题,这是一个混合,通过附加&nohup命令:

$ nohup chromex &
Run Code Online (Sandbox Code Playgroud)

默认输出将写入nohup.out文件

要停止我可以运行的作业ps ax,通过正确的命令找到PID然后kill -9 PID

arguments daemon google-chrome background-process

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

使Ruby程序成为一个守护进程?

我想写一个Ruby程序,它总是在我的Mac上运行在后台(一个守护进程).

有人能指出我如何做到这一点的正确方向?

ruby daemon

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

什么是用于创建Python守护程序的事实库

我试图使用python-daemon库,在我看来这是创建守护进程而不忘记任何东西最安全的方法.文件很差,只是PEP 3143.

另一方面,我发现了许多链接到Sander Marechal的Python中一个简单的unix/linux守护进程.这看起来是一个更好的解决方案,或者我还没有尝试过使用它.

编辑:我使用过Sander Marechal的解决方案,它似乎很好用.


那么Python社区中创建一个守护进程的事实上的方法是什么呢,它是这些库中的一个,还是只是自己完成(分两次等)?

此外,您会认为任何带有PEP的库都是更好的选择,因为它比任何其他解决方案更接近创建守护进程(或至少更标准的方式)的综合方式.那么这个python-daemon包的处理是什么,它是否会包含在标准库中?

python daemon python-daemon

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

25
推荐指数
2
解决办法
8652
查看次数

如何编写GNU Screen脚本以启动在其中运行的程序,以便它不会在程序完成时退出会话?

如何编写GNU Screen脚本以启动在其中运行的程序,以便在程序完成时它不会退出会话?

我想作为一个守护进程运行一个交互式程序,如果我手动启动屏幕,然后在其中启动该程序,一切正常,我想要的.如果程序退出或崩溃,屏幕会话仍然存在,我可以去看看它刚刚发生了什么.但是,如果我使用简单的屏幕启动启动程序,那么它会在屏幕内运行,但是当程序退出时,屏幕会话结束并且程序的任何输出都会丢失.

所以screen –dmS serverName serverApplication对我的方案不起作用.我确实想过制作一个启动我要运行的程序的脚本然后永远睡觉,然后我可以在屏幕的同时启动脚本并且应该得到我想要的效果但是它似乎是一种不整洁的做事方式我相信一定有更优雅的东西.

我已经阅读了很多屏幕教程并在手册页中进行了搜索,但没有任何内容可以作为正确的方法来实现.我尝试过-X但是这是用于屏幕命令,而不是用于在屏幕会话中运行命令...任何建议都将非常感激; 如果有更好的脚本编写工具,我甚至乐意使用除GNU Screen之外的其他东西,但请尽可能给我一个例子.

(旁注:我将运行的两件事是一个minecraft_server和一个mythtv_backend.我的计划是通过一些ruby/bash脚本从启动时的chron作业启动它们)

daemon gnu-screen

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

为什么在编写linux守护进程时必须从tty中分离出来?

当我尝试使用C在linux下编写一个守护进程时,我被告知我应该在fork代码块之后添加以下代码:

/* Preparations */
...

/* Fork a new process */
pid_t cpid = fork();
if (cpid == -1){perror("fork");exit(1);}
if (cpid > 0){exit(0);}

/* WHY detach from tty ? */
int fd = open("/dev/tty", O_RDWR);
ioctl(fd, TIOCNOTTY, NULL);

/* Why set PGID as current PID ? */
setpgid(getpid(), 0);
Run Code Online (Sandbox Code Playgroud)

我的问题是:是否有必要进行上述操作?

c linux terminal daemon

24
推荐指数
2
解决办法
7718
查看次数

如何在PHP客户端和C守护程序服务器之间进行IPC?

并感谢您看一下这个问题.

背景
我有几台机器在很短的时间内连续产生多个(最多300)PHP脚本控制台.这些脚本快速运行(不到一秒钟)然后退出.所有这些脚本都需要只读访问大型trie结构,每次运行脚本时加载到内存中都非常昂贵.服务器运行Linux.

我的解决方案
创建一个C守护进程,将trie结构保存在内存中并接收来自PHP客户端的请求.它将收到来自每个PHP客户端的请求,对内存结构执行查找并回答答案,从而避免PHP脚本执行该工作.请求和响应都是短字符串(不超过20个字符)

我的问题
我是C守护进程和进程间通信的新手.经过大量研究,我已将选择范围缩小到Message Queues和Unix域套接字.消息队列似乎已经足够了,因为我认为(我可能错了)他们排队了守护进程的所有请求以连续回答它们.但是,Unix域套接字似乎更容易使用.但是,我有各种各样的问题,我无法找到答案:

  1. PHP脚本如何发送和接收消息或使用UNIX套接字与守护进程通信?相反,C守护进程如何跟踪它必须向哪个PHP进程发送回复?
  2. 我见过的守护进程的大多数例子都使用了一个带有睡眠条件的无限while循环.我的守护进程需要为任何时候可能出现的许多连接提供服务,并且响应延迟至关重要.如果PHP脚本在睡眠时发送请求,守护程序将如何反应?我已经阅读过有关民意调查和epoll的内容,这是等待收到邮件的正确方法吗?
  3. 每个PHP进程总是发送一个请求,然后等待接收响应.我需要确保如果守护程序关闭/不可用,PHP进程将等待设置的最大时间响应,如果没有收到回答将继续,而不是挂起.可以这样做吗?

数据结构的实际查找非常快,我不需要任何复杂的多线程或类似解决方案,因为我认为以FIFO方式处理请求就足够了.我还需要保持简单的愚蠢,因为这是一项关键任务服务,而且我对这类程序还是比较陌生的.(我知道,但我真的无法解决这个问题,学习经验会很棒)

我真的很感激代码片段,它为我所具有的具体问题提供了一些亮点.指南和指针的链接也将受到欢迎,这些指南将进一步了解这个低级别IPC的阴暗世界.

谢谢你的帮助!


更新

现在比我在提出这个问题时所了解的要多得多,我只是想向任何感兴趣的人指出,Thrift框架和ZeroMQ在抽象硬件,套接字级编程方面做得非常出色.Thrift甚至可以免费为您提供服务器的脚手架!

事实上,不要去构建网络服务器的所有艰苦工作,而是考虑使用已经为您解决问题的良好异步服务器编写应用程序服务器代码.当然,使用异步IO的服务器非常适合不需要密集CPU处理的网络应用程序(或者事件循环块).

python的例子:Twisted,gevent.我更喜欢gevent,而且我不包括龙卷风,因为它专注于HTTP服务器端.

Ruby的例子:EventMachine

当然,Node.js基本上是当今异步服务器的默认选择.

如果您想深入了解,请阅读C10k问题Unix网络编程.

php c daemon ipc

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

如何防止Spring Boot守护程序/服务器应用程序立即关闭/关闭?

我的Spring Boot应用程序不是Web服务器,但它是使用自定义协议的服务器(在本例中使用Camel).

但Spring Boot在启动后立即停止(优雅地).我该如何防止这种情况?

我希望应用程序在Ctrl + C或编程时停止.

@CompileStatic
@Configuration
class CamelConfig {

    @Bean
    CamelContextFactoryBean camelContext() {
        final camelContextFactory = new CamelContextFactoryBean()
        camelContextFactory.id = 'camelContext'
        camelContextFactory
    }

}
Run Code Online (Sandbox Code Playgroud)

java spring daemon spring-boot server

23
推荐指数
4
解决办法
3万
查看次数