前几天我有了自己的 linode 服务器,并从 aws linux 上移动了一个我正在玩的小型 nodejs/express。一切都很好,但是如果我用 upstart 启动应用程序,它就不会以正确的权限运行,也无法将文件写入磁盘。我尝试了新贵脚本的各种变体,以 root 身份,以我的用户名,www-data 身份,但没有任何效果。我将publicexpress的目录设置为 777 即使只是作为测试,但没有运气。我开始我的新贵工作sudo start now-images-manager。当我运行时,ps -ef我得到以下输出:
root 25150 1 0 11:26 ? 00:00:00 sudo node /home/myusername/sites/now-images-manager/app.js
root 25151 25150 0 11:26 ? 00:00:03 node /home/myusername/sites/now-images-manager/app.js
Run Code Online (Sandbox Code Playgroud)
这是我的新贵脚本:
#!upstart
description "now-images-manager startup script"
author "me@me.com"
start on startup
stop on shutdown
script
export HOME="/root"
echo $$ > /var/run/now-images-manager.pid
exec sudo node /home/myusername/sites/now-images-manager/app.js >> /home/myusername/sites/now-images-manager/now-images-manager.sys.log 2>&1
# exec sudo -u myusername /usr/bin/node /home/myusername/sites/now-images-manager/app.js >> /home/myusername/sites/now-images-manager/now-images-manager.sys.log 2>&1 …Run Code Online (Sandbox Code Playgroud) 我有一个服务的新贵配置,需要检查它启动时进程的存在。这听起来很容易,但我已经尝试了 3 个小时来解决这个问题,但我迷路了。问题似乎是一些 grep 语句导致 upstart 中的脚本退出,导致启动服务失败。但是 upstart 不记录任何内容,它只是退出脚本并消失了。
以下是触发问题的一些示例行:记录第一个回声及其 grep 的输出,记录第二个回声,但不记录其 grep 的输出。在第二个 echo upstart 之后,退出脚本并停止。问题是添加 -v 选项或其他类似使用 [[:digit:]] 之类的正则表达式类的选项。似乎我需要转义一些字符,但我根本不知道如何转义。一个简单的 -v 或类似的东西不起作用。
script
echo grep
ps ax | grep "postgres: wal writer process" | grep "grep"
echo grep2
ps ax | grep "postgres: wal writer process" | grep -v "grep"
end script
Run Code Online (Sandbox Code Playgroud)
有没有人知道我做错了什么以及如何解决问题?
我从这个 gist创建了一个新贵服务。我把它放入:
[andrey@vm01 ~]$ ll /etc/init/play.conf
-rw-r--r--. 1 root root 1255 Dec 1 20:50 /etc/init/play.conf
Run Code Online (Sandbox Code Playgroud)
我还安装了 upstart,因为我的系统上没有它:
sudo yum install upstart
Run Code Online (Sandbox Code Playgroud)
我重新启动了几次,但仍然出现此错误:
[andrey@vm01 ~]$ sudo service play status
[sudo] password for andrey:
play: unrecognized service
Run Code Online (Sandbox Code Playgroud)
你有什么想法吗?
Ubuntu 使用 upstart 而不是 sysvinit。但是仍然有运行级别和其中的链接。
我已经安装了 tor 并且它已将自己添加到操作系统的启动中。现在我想删除它,流行的选项是从运行级别删除启动和停止服务的链接或使 /etc/init.d/ 脚本不可执行。这很好,但是如果我想再次将 tor 放在启动列表中,这将是有问题的。我怎么知道将正确的序列放在正确的运行级别目录中。
有没有完整的指南?这有什么规则?任何工具来管理初始化?
请告诉
这个命令的开关和参数是什么意思?
exec su -s /bin/sh -c 'exec "$0" "$@"' root -- /opt/nsq/bin/nsqd
Run Code Online (Sandbox Code Playgroud)
具体的--部分和exec "$0" "$@"应该做什么。
我知道$0为脚本设置一个循环以保持运行。
您可以忽略该/opt/nsq/bin/nsqd部分。这是我正在运行的应用程序。
是否可以将 upstart 启动的进程置于前台?
root@me:~# ps aux | grep my-app
root 2208 0.2 0.0 1456 480 ? S 17:38 0:01 /opt/me/my-app
root@me:~# fg 2208
-bash: fg: 2208: no such job
root@me:~# fg $(pidof my-app)
-bash: fg: 2208: no such job
Run Code Online (Sandbox Code Playgroud) 我有一个新贵服务定义为:
/etc/init/sshproxy.conf
description "Lenik's secret tunnel thru *.ssh.myserver.com"
author "??? (Lenik)"
start on (net-device-up IFACE!=lo)
stop on runlevel[!2345]
script
# -T disable pseudo-tty allocation
# -f go to background after login but before command exec
# -n stdin from /dev/null, must be used when ssh is run in bg.
# -N no command
# -D "dynamic" app-level port forwarding.
sudo -usshproxy ssh -qTfn -ND *:7878 ssh.myserver.com
end script
Run Code Online (Sandbox Code Playgroud)
但是 ssh 隧道在几个小时后似乎变得僵化了,所以我想每小时重新启动它,如何在这个 .conf 文件中执行它,或者我应该编写另一个 cron.hourly 作业?