如何让 Ubuntu 新贵不挂在交互式启动和停止上?
\n\n我创建了许多新贵脚本,它们在初始化期间工作正常,但当我在控制台输入它们时经常挂起。如果我按 CTRL+C 退出,则只会发生作业状态更改。该脚本永远不会运行。
\n\nI\xe2\x80\x99m 在具有 Linux 2.6.39 内核的 Xen 虚拟服务器上运行 Ubuntu Lucid。
\n\n下面只是许多具有这种行为方式的脚本的代表性示例:
\n\ndescription "apache2"\n\nstart on local-filesystems \\\n and (net-device-up IFACE=lo) \\\n and (runlevel [2345])\nstop on runlevel [016]\n\nrespawn\nrespawn limit 10 5\n\nexpect daemon\n\nscript\n . /etc/apache2/envvars\n /usr/sbin/apache2ctl start\nend script\nRun Code Online (Sandbox Code Playgroud)\n 我正在运行 Ubuntu 10.04 LTS 并尝试通过启动、停止、状态运行服务,但出现以下相应错误。我已经用谷歌搜索过,但一切都像 2-3 岁一样没有答案。
status: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
Run Code Online (Sandbox Code Playgroud) 这是我的 solr 新贵配置,它位于 /etc/init/solr.conf
# /etc/init/solr.conf
description "Starts Solr server"
respawn
start on startup solr_push
script
echo "Starting solr server..."
cd /opt/solr/solr-4.2.1/example
exec java -Xms50M -Xmx80M -Djava.util.logging.config.file=/etc/solr/logging.properties -Dsolr.solr.home=/etc/solr -jar start.jar >> /var/log/solr/solr-console.log 2>&1
end script
Run Code Online (Sandbox Code Playgroud)
当我更新此新贵配置时,例如将 java 选项从-Xmx80Mto更改 为 -Xmx70M然后执行
sudo restart solr
ps aux | grep solr
Run Code Online (Sandbox Code Playgroud)
我仍然看到-Xm80M那边,即使 solr 进程是用新的进程 id 启动的。
当我这样做sudo stop solr然后sudo start solr手动 - 一切看起来都符合预期,我可以在ps aux.
我的印象是 upstart restart 确实在幕后停止和启动,但是为什么手动停止和启动的结果与重新启动不同?
请建议,也许我做错了什么?
我正在使用 Ubuntu 服务器 12.04。我有一个 nodejs 应用程序,我想像这样运行:
NODE_ENV=production PORT=3001 APP_PATH=/var/www/myapp forever -a -l /var/www/myapp/forever.log -o /var/www/myapp/out.log -e /var/www/myapp/err.log /var/www/myapp/app.js
Run Code Online (Sandbox Code Playgroud)
我想在系统启动时运行它,并在系统关闭时“永远停止”。我已经读过,这样做的首选方法是使用 upstart 脚本。这就是我尝试过的:
description "Upstart script"
start on startup
stop on shutdown
expect fork
env MYAPP_PATH="/var/www/myapp"
script
NODE_ENV=production PORT=3001 APP_PATH=$MYAPP_PATH exec forever -a -l $MYAPP_PATH/forever.log -o $MYAPP_PATH/out.log -e $MYAPP_PATH/err.log $MYAPP_PATH/app.js
end script
pre-stop script
exec forever stop $MYAPP_PATH/app.js >> $LOG
end script
Run Code Online (Sandbox Code Playgroud)
当我运行它时它挂起,然后它说该作业已经在运行(实际上并没有运行)。
任何如何正确执行此操作的建议表示赞赏。谢谢!
我正在寻找好的资源来了解有关如何在 Ubuntu 上编写/调试/维护 init.d 脚本的更多信息。
你有任何链接或书籍推荐吗?
我按照本教程为我的 node.js 服务器设置新贵:http : //howtonode.org/deploying-node-upstart-monit
问题是,当我尝试运行“start mynodeprogram”时,出现了错误:
root@v:/# start mynodeprogram
start: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused
Run Code Online (Sandbox Code Playgroud)
我使用以下命令安装了暴发户:
root@v:~# apt-get install upstart
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
upstart
0 upgraded, 1 newly installed, 0 to remove and 3 not upgraded.
Need to get 0 B/272 kB of archives.
After this operation, 717 kB of additional disk space will be …Run Code Online (Sandbox Code Playgroud) 我想通过将 args 传递给启动作业来运行我的流程的多个实例:
start myapp instance1
start myapp instance2
Run Code Online (Sandbox Code Playgroud)
等等
我想要一个新贵的 conf 文件,而不是拥有与我的应用程序实例一样多的 conf 文件。是否可以 ?
我已经在安装了 Upstart 的 Jessie 服务器上进行了一些测试,并将其替换为 SysV,反之亦然。
在此之后,我无法再重新启动。
root@amoo-001:~# reboot
Failed to talk to init daemon.
root@amoo-001:~# systemctl reboot
Failed to get D-Bus connection: Unknown error -1
Run Code Online (Sandbox Code Playgroud) 我有一份新贵的工作/etc/init/tunnel.conf:
description "SSH Tunnel"
start on (net-device-up IFACE=eth0)
stop on runlevel[016]
respawn
exec autossh -nNT -o ServerAliveInterval=15 -R 12345:localhost:22 myuser@myserver
Run Code Online (Sandbox Code Playgroud)
当我查看/var/log/upstart/tunnel.log:
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).
Run Code Online (Sandbox Code Playgroud)
但如果我从终端尝试
autossh -R 12345:localhost:22 myuser@myserver
Run Code Online (Sandbox Code Playgroud)
它连接到我的服务器而不要求我输入密码(我已经复制了 SSH 密钥)
当我使用sudo:
sudo autossh -R 12345:localhost:22 myuser@myserver
Run Code Online (Sandbox Code Playgroud)
它要求我提供 myserver 密码,所以我想这就是我在新贵工作中遇到的问题。为什么 SSH 要求我输入密码,我们以 root 身份运行它?