我有一个启动自定义码头服务器的新贵脚本。当我什么sudo start [myservice]都没有发生。随后,将其sudo status [myservice]显示为:[myservice] start/killed, process 3586。
这是 /etc/init/[myservice].conf 中的脚本:
description "[description]"
author "[my name and email]"
start on runlevel [2345]
stop on runlevel [016]
respawn
expect fork
script
sudo -u www-data /path/to/grafserv-start.sh >> /tmp/upstart.log 2>&1
end-script
Run Code Online (Sandbox Code Playgroud)
这里是grafserv-start.sh:
#!/bin/bash
/usr/bin/java -Djetty.port=3070 -jar /path/to/grafserv/trunk/start.jar
echo "Done starting GrafServ"
Run Code Online (Sandbox Code Playgroud)
我尝试将脚本命令的输出重定向到 tmp 日志文件,但从未创建该文件。当我开始它时,我只是挂起,直到我 ^C。另外,我尝试用 strace 运行它,但这给了我很多关于套接字的东西。
我正在尝试将 Resque worker 设置为 Upstart init 脚本,以供 Monit 在 Rails 应用程序中使用。我不是系统管理员,我尝试使用我们服务器上的其他 init 脚本中的示例编写此代码,这是我得到的:
start on startup
stop on shutdown
pre-start script
cd /var/www/my-app/current
end script
script
exec bundle exec rake environment resque:work RAILS_ENV=staging PIDFILE=/var/run/resque.pid QUEUE=sync >> /var/log/resque.log
end script
Run Code Online (Sandbox Code Playgroud)
但它不起作用,如果我尝试sudo start resque我得到:
resque start/running, process XXXX
Run Code Online (Sandbox Code Playgroud)
据我所知,什么都没有启动,没有找到 Resque 进程,也没有日志文件。我完全不知道如何让它工作。
更新:我找到了 syslog 文件,它说:
Nov 4 17:20:09 fantasysports init: resque main process (3057) terminated with status 2
Run Code Online (Sandbox Code Playgroud)
更新:我尝试使用 sudo 运行它(是的,这没有意义!)并删除了对日志文件的输出重定向,现在我得到了不同的状态代码:
Nov 4 17:29:44 fantasysports init: resque main process …Run Code Online (Sandbox Code Playgroud) 如何在不重新启动服务器的情况下在系统范围内获取新的环境变量?
作为 Ubuntu 11.x 服务器,我使用 Upstart 来启动/重启进程。
我向 /etc/environment 添加了一个新的环境变量,需要由我的应用程序的一个进程获取。
如果我直接从我的 shell 开始这个过程,这个变量就会被拾取并且一切都很好(我已经为我的会话提供了 /etc/environment )。但是,当我使用其 Upstart 服务名称启动/重新启动进程时,没有看到该变量。
sudo start app-name
Run Code Online (Sandbox Code Playgroud)
我很确定如果我重新启动服务器,新变量将被选中,但是我想尽量避免这种情况。我有一些其他的实时进程正在运行,如果可能的话,我希望避免中断。
我在 Ubuntu 服务器上运行 MongoDB。它使用 upstart 脚本在机器启动时启动 mongod。我注意到如果进程崩溃,它不会重新启动。
我怎样才能确保如果它崩溃了,mongod 进程会重新启动?
我有一个接近新的服务器,并且在按预期启动 nginx 时遇到问题。我已经以基本相同的方式配置了另一台服务器,它在那里工作。我想这两者之间肯定存在一些环境差异,但我一直没能找到它。
简短版本:
Starts - sudo nginx
Fails - sudo service nginx start
Fails - sudo service nginx restart
works - sudo service nginx stop
Run Code Online (Sandbox Code Playgroud)
当命令失败时,他们实际上并没有说什么:
* Restarting nginx nginx [fail]
Run Code Online (Sandbox Code Playgroud)
日志文件中没有其他内容(nginx[访问或错误]、系统日志)或写入屏幕
更多细节:
都说配置文件没问题
sudo service nginx configtest
sudo nginx -t
Run Code Online (Sandbox Code Playgroud)
我检查了 nginx.conf 的权限,它们没问题(与工作服务器相同)再次检查 www-data 是否可以访问日志文件等,确实如此
/etc/init.d/nginx 文件在两台服务器上是相同的,所使用的命令也是如此(见上文)
日志文件确实存在
用户/组 www-data 确实存在
Ubuntu 12.04 LTS
nginx 1.6
在每个服务器上运行请求的 - sudo strace service nginx start 除了下面的第一部分之外,我在两个不同的服务器上看到的唯一其他区别是指针和 PID 之类的东西。我在每组的两行前面加上了 ***
==== 那个有效的
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fd6076a09d0) = 24394
close(4) = 0
*** …Run Code Online (Sandbox Code Playgroud) 我有一个运行 Ubuntu 15.04 的 Vagrant 盒子,它有一个 upstart 脚本,可以在系统启动时启动一个服务。它有一个start on vagrant-mounted节,因为该服务要求 Vagrant 挂载 /vagrant 目录。
我现在正在将此脚本迁移到 systemd(我是全新的)并且无法在引导期间成功运行脚本,因为 /vagrant 在脚本运行时未安装。After=vagrant-mounted不起作用,但可能有助于显示我正在尝试做的事情。
在引导期间挂载 Vagrant 目录时,如何运行 systemd 单元?
注意systemctl start my.service 确实成功启动了服务,并且服务被systemctl enabled'ed。
我为应该在启动时运行的 node.js 程序制作了一个相当简单的启动脚本:
start on startup
stop on shutdown
script
exec sudo -u max WEBSITES_DIR=/home/max/websites/ /usr/local/bin/node /home/max/websites/server.js 2>&1 >> /var/log/node.log
end script
Run Code Online (Sandbox Code Playgroud)
如果我使用:
sudo start my-program
Run Code Online (Sandbox Code Playgroud)
它有效,但是当我重新启动机器时,我收到错误消息:
init: my-program main process (325) terminated with status 2
Run Code Online (Sandbox Code Playgroud)
有人知道如何调试吗?
我希望能够使用 upstart 来管理我无法完全控制分叉行为的守护进程。“pid”节从 0.3.9 版本开始被删除,所以我不能将它指向一个 pid 文件。解决这个问题的正确方法是什么?我是否必须编写一个发出 SIGSTOP 的包装脚本?
所以,我正在为 mysql 编写一个新贵的初始化脚本。应该是微不足道的吧?我的停止节看起来像:
kill timeout 30
stop on runlevel [016]
Run Code Online (Sandbox Code Playgroud)
我shutdown now -r和 mysql 大喊我的 MyISAM 表崩溃了,就像kill -9我的 mysql 进程一样。嘘。新贵似乎没有在重新启动之前等待 mysql 退出。在谷歌上的一些搜索发现我这个链接建议我这样做,而不是:
stop on starting rc RUNLEVEL=[016]
Run Code Online (Sandbox Code Playgroud)
事实上,这似乎解决了这个问题。
但是:WFT?本质上,我想在尝试卸载本地文件系统之前确保 mysql 已停止。这是正确的方法吗?为什么我的stop on runlevel节在切换运行级别之前不等待 mysql 停止?
并且:这是你知道的,在任何地方都有记录吗?
我看到一个奇怪的问题,php.ini如果我php-fpm在启动它时没有明确地将它传递给它,则不会使用它。
这是我正在使用的新贵脚本:
start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [016]
pre-start script
mkdir -p /run/php
end script
expect fork
respawn
exec /usr/local/php/sbin/php-fpm --fpm-config /etc/php/php-fpm.conf
Run Code Online (Sandbox Code Playgroud)
如果 PHP 以上述开头,php.ini则永远不会使用my ,即使它在Configuration File (php.ini) Path.
这是来自phpinfo()以下内容的相关部分:
Configuration File (php.ini) Path /etc/php/
Loaded Configuration File (none)
Scan this dir for additional .ini files (none)
Additional .ini files parsed (none)
Run Code Online (Sandbox Code Playgroud)
如果我修改 upstart 脚本的最后一行php-fpm以 php.ini明确指向:
exec /usr/local/php/sbin/php-fpm --fpm-config /etc/php/php-fpm.conf -c /etc/php/php.ini
Run Code Online (Sandbox Code Playgroud)
然后我们看到 …