我设法使用Capistrano成功地部署了Rails 4,Puma,Nginx应用程序。 当我部署cap production deploy一切都很好。 我的问题是,如果服务器因任何原因重新启动,或者如果它崩溃,它不会重新启动。 我在DigitalOcean上使用Debian 8。 看来Debian 8使用systemd ,所以我遵循Puma的指示,但是没有奏效。 经过一番研究,我发现了更多的脚本,看起来最明智的脚本是: [Unit] Description=Rails-Puma Webserver [Service] Type=simple User=myuser WorkingDirectory=/home/myuser/apps/myapp ExecStart=/home/myuser/.rvm/rubies/ruby-2.2.2/bin/systemd_rails server -e production TimeoutSec=15 Restart=always [Install] WantedBy=multi-user.target 我已经保存在/etc/systemd/system/rails-puma.service上面的文件,然后启用它: sudo systemctl enable rails.service ,最后启动它: sudo systemctl start rails-puma.service 不幸的是没有工作。 这是sudo systemctl status rails-puma.service : ● rails-puma.service – Rails-Puma Webserver Loaded: loaded (/etc/systemd/system/rails-puma.service; enabled) Active: failed (Result: […]
我正在使用System V来pipe理消息队列。 我成功地做了一个工作原型,一切都按预期工作,但我想有一个LIFO队列,而不是FIFO(预计最后msgsnd消息发送是第一次读取msgget )。 这可能吗 ?
我正在尝试让vixie-cron将任何输出发送到日志文件,而不是发送到根(或用户)的电子邮件。 是否有configuration的方式来做到这一点,而不是在命令中redirectstderr和stdout文件stream?
我正在一个项目中工作,脚本将在Linux下运行。 它有很多模块,都是用C ++编写的。 我需要从PHP调用这些模块。 我的问题如下: 我的模块是软件包中的一个模块。 我们的软件具有PHP层来接收用户input并将其存储在数据库中,并在需要时调用C ++引擎。 所有模块正在运行并使用由基本模块设置的一些环境variables。 有一层PHP通过我们获得用户对我们C ++引擎的input。 我需要从PHP调用一个应用程序(abc.out),它将填充数据库。 问题是我必须在应用程序工作之前设置一个新的环境variables。 我使用getenv()获取旧的环境variables,然后附加一个path并重新设置。 我用putenv()来设置新的环境variables。 设置环境variables后,我使用system()从PHP调用该应用程序,它正在工作。 我怀疑这个环境variables是否会影响正在运行的其他模块。 有一件事是,如果我们使用system()进行多个操作,我可以设置环境variables,并从同一个system()调用中调用我的应用程序。 这里我的疑问是,这是否也会影响正在运行的其他应用程序,或者只影响使用system()调用的特定应用程序。 那是system()是为每个程序创build一个新的会话,我们所说的或不是? 谢谢
我有很多服务器已经运行很长一段时间(在几年的时间范围内),但是我想知道它们从命令行到底有多大,因为我无法物理地访问它们。 基本上,我有sudo帐户,但我不能去机器房间阅读制造商的标签。 我如何从命令行得到这个想法? 一个粗略的想法就足够了。 谢谢。
我看到,我可以做freopenredirect到一个控制台的标准输出到另一个tty。 我试图redirect到多个terminal,包括控制台。 控制台是程序运行的地方。 什么是最好的办法呢? TIA
我有一个应用程序,我们正在使用initd转换为systemd。 initd脚本用来运行“myscript.bash start”,但是用户也可以运行“myscript.bash start”。 现在,当用户运行“myscript.bash start”时,它运行systemctl(它本身启动“myscript.bash startup”)来启动服务。 (这是愚蠢的,我知道 – 这个想法是保留myscript.bash的内容的版本历史logging,但也允许用户以他们习惯的方式启动系统,切换到systemctl应该是不可见的)。 以前,如果用户运行myscript.bash,他们会得到一堆关于启动过程的控制台更新。 现在这些信息不会去控制台。 我已经尝试了几件事情,最有前景的似乎是将StandardOutput&StandardError设置为tty: StandardOutput=tty StandardError=tty ExecStart=/bin/bash -c './myscript.bash startup &' ExecStop=/bin/bash -c './myscript.bash shutdown' 但是我得到这个错误: systemd[20694]: Failed at step STDOUT spawning /bin/bash: Inappropriate ioctl for device 我已经看了这个: 如何pipe输出到文件作为Systemd服务运行时? (这给了我想要尝试StandardOutput =),但是目标是要写入一个文件,我试图得到输出到用户的控制台。 这是因为我们有一个脚本运行systemctl,而不是由用户直接启动? 有没有办法做到这一点?
当发生某些事件时,我想转储堆栈,所以我写了一个脚本到init.rc ,如下所示。 然后我使用setprop dump_stack 0和setprop dump_stack 1来assembly它,但是在我的控制台中没有输出? on property:dump_stack=1 exec /system/bin/cat /proc/100/stack # pid = 100 我已经添加了一些日志在system \ core \ init \ builitins.c,它说代码是工作(retstatus是0)。 即使我将脚本更改为“exec / system / bin / cat / proc / 100 / stack> / data / temp”,它仍然不起作用。 那么,init.rc(init进程)的输出在哪里呢? PS。 我写脚本到init.rc的原因是“Permission”。 init进程是root的,所以它可以转储其他进程的堆栈。 而且,语法是否正确? 我用http://www.kandroid.org/online-pdk/guide/bring_up.html中的Android Init Language编写“exec / system / bin / cat / […]
下面的命令在我的embedded式Linux(Beaglebone Black)上运行良好: echo bone_pwm_P9_21 > /sys/devices/bone_capemgr.?/slots 但是在使用这个小的C ++程序时不行: #include <stdlib.h> #include <string> int main { system(std::string("echo bone_pwm_P9_21 > /sys/devices/bone_capemgr.?/slots").c_str()); return 0; } 问题涉及'?' 问号,用作通配符。 当传递给system()的std::string中的问号被一个普通字符replace时, system()函数将评估完美命令。 我尝试过的解决scheme没有成功: replace? 与\? replace? 带*
我在60 GB的Linux机器上有一个很大的C ++进程(35+ GB的RAM使用),需要system()来执行一些function。 但是,因为system()内部分叉并执行新进程,所以需要虚拟内存空间,这是原始进程RAM的两倍。 我明白,我可以使用sysctl总是启用overcommitting内存,从而使我的过程分叉。 但是,是否有一个可以执行新进程而不需要太多虚拟内存的system()的替代方法?