标签: upstart

我应该如何从新贵脚本中使用 sudo?

我正在使用 upstart 在 Amazon Linux AMI EC2 实例上运行我的 node.js 应用程序。我在让它工作时遇到了一些问题,总结如下。

在我的脚本中,我有这样一行:

exec sudo -u www /usr/local/bin/node /var/www/foo/app.js >> /var/log/foo.sys.log 2>&1
Run Code Online (Sandbox Code Playgroud)

运行时,工作从未通过stop/waiting,当我打开时,log-priority debug我看到了这一行:

sudo: sorry, you must have a tty to run sudo
Run Code Online (Sandbox Code Playgroud)

我最后在这篇文章中讨论了visudo为什么我不应该使用它以及它建议如何使用--session-command。所以我把这行改成:

exec su --session-command="/usr/local/bin/node /var/www/foo/app.js >> /var/log/foo.sys.log 2>&1" www
Run Code Online (Sandbox Code Playgroud)

日志现在显示(sys) Starting但initctl status foo仍然显示foo stop/waiting。

在这一点上,我不知道该怎么做才能使其正常工作,任何帮助将不胜感激。

更新:我已经看完了SO 的这篇文章,结果是一样的。

su upstart amazon-ec2 node.js

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

新贵脚本与命令行:为什么会有这种行为差异?

我正在尝试设置 Tomcat 以从新贵开始。我发现以下作品:

  description "Tomcat Server"

  start on runlevel [2345]
  stop on runlevel [!2345]
  respawn
  respawn limit 10 5

  setuid tomcat

  env JAVA_HOME=/usr/lib/jvm/default-java
  env CATALINA_HOME=/opt/apache-tomcat-7.0.34

  script
    chdir $CATALINA_HOME
    exec $CATALINA_HOME/bin/catalina.sh run
  end script
Run Code Online (Sandbox Code Playgroud)

但是如果我删除chdir,tomcat 会启动,但是FileNotFound当我.wars加载时有很多例外。(也就是说:.wars它们自己确实加载了但它们在加载时抛出异常。)

请注意,此行为与我从命令行调用时所看到的不同catalina.sh。从命令行调用,我可以/opt/apache-tomcat-7.0.34/bin/catalina.sh run 从任何目录(没有 chdiring)运行,一切都很好。

那么为什么chdir在我的新贵脚本中是必要的呢? (新贵环境与我的命令行环境有何不同?)


我不使用 chdir 时看到的错误示例:

Feb 22, 2013 3:00:11 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive my-war.war
log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: my-war.log …
Run Code Online (Sandbox Code Playgroud)

scripting tomcat shell upstart

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

Upstart 脚本出现 Autossh 错误:ssh 提前退出,状态为 0

我设置了以下新贵脚本:

# autossh

description     "autossh connections"

start on started dbus
stop on (runlevel [06] or stopped dbus)

respawn
respawn limit 5 60 # respawn max 5 times in 60 seconds

script
    export AUTOSSH_PIDFILE=/var/run/autossh.pid
    export AUTOSSH_POLL=60
    export AUTOSSH_FIRST_POLL=30
    export AUTOSSH_GATETIME=0
    export AUTOSSH_DEBUG=1
    exec sudo -H -u pi -s autossh -M 0 \
         -R remoteport:127.0.0.1:localport remoteuser@remote.host
    exec sudo -H -u pi -s autossh -M 0 \
         -R remoteport2:127.0.0.1:localport2 remoteuser@remote.host
end script
Run Code Online (Sandbox Code Playgroud)

但每次启动后我都会收到此错误消息:

ssh 提前退出,状态为 0

我该如何修复它?

谢谢

ssh ssh-tunnel upstart

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

Celery with Upstart - processes are dying unexpectedly

When I'm running Celery with Upstart, after a while, the child processes or the main processes die without any trace.

The Upstart script I'm using (/etc/init/celery):

description "celery"

start on runlevel [2345]
stop on runlevel [!2345]

kill timeout 20
# console log
setuid ***
setgid ***

script
chdir /opt/***/project/
exec /opt/***/virtualenvs/***/bin/python manage.py celery worker --settings=settings.staging -B -c 4 -l DEBUG
end script

respawn
Run Code Online (Sandbox Code Playgroud)

When running exectly the same command without upstart (manually running the exec part), everything works …

ubuntu django upstart celery

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

当作为新贵作业运行时,nc 在连接时立即退出

我正在使用以下/etc/init/jsonlog.conf新贵工作:

description     "jsonlog"

start on runlevel [23]
stop on runlevel [06]

respawn

script
  cd /tmp
  echo "about to listen"
  /bin/nc -l 3333
  echo "finished listening"
end script

post-stop script
  sleep 1
end script
Run Code Online (Sandbox Code Playgroud)

问题是nc每次客户端连接时都会立即退出。

所需的行为是接收到的所有数据(即 utf8 json)应以/var/log/upstart/jsonlog.log. 该服务器运行的是 Ubuntu 12.04LTS。

nc从 bash shell 运行时该命令可以正常工作。

我假设这与stdin. 我尝试过使用一个-q -1选项,但没有帮助。

PS 我很满意这样一个事实,即它一次只会听一个客户。

netcat upstart stdin nc

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

通过 Upstart 运行 Django 站点

我在我的一台 Ubuntu 服务器上托管了几个 Django 站点。直到最近,我一直在使用 Cherokee HTTPd,它可以选择启动后端应用程序,如 Django 站点,但我刚刚切换到 nginx。

在 cherokee 下,我只是“运行”Django 站点(站点存储在 中/web/):

cd /web/mywebsite/; python manage.py runfcgi workdir=/web/mywebsite method=threaded socket=/web/mywebsite/sock pidfile=/web/mywebsite/pid maxspare=3 maxrequests=500
Run Code Online (Sandbox Code Playgroud)

然后我将连接到/web/mywebsite/sock. Cherokee 也以我选择的用户身份运行它,就我而言www-data。

在 Cherokee 下,这种方法对我很有效,但现在我要转向 nginx,我手头上没有什么东西可以进行流程管理。

环顾四周,实际上有数百种不同的管理方式。初始化脚本、cron 检查、daemontools。但是当我在 Ubuntu 上(可能永远都是)Upstart 似乎是有道理的......但我从哪里开始呢?

有人能给我一个新贵脚本的例子,它运行上面的脚本并且如果它死了会重新生成它吗?

我有几个 django 站点/web/(它们是该目录中唯一的目录)所以如果有一种欺骗方式我可以让这个新贵脚本启动它们(使用相同的设置)并监视它们,那就是超级超级棒。

django upstart

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

在 CentOS 6 中用脚本替换 TTY

我将如何在 CentOS 6 中用自定义脚本替换 TTY。CentOS 6 使用 upstart 而不是标准的 SysV init 脚本,所以我很难弄清楚它是如何工作的。

通常(在 SysV init 脚本中),我会编辑 /etc/inittab 并用我的脚本替换 mingetty 行之一,如下所示:

1:2345:respawn:/root/myscript tty1
Run Code Online (Sandbox Code Playgroud)

但是,对于 Upstart,此文件没有相关行,因此我不确定如何完成此操作。

startup centos upstart

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

start-stop-daemon默认将pid文件存储在哪里?

当我有一个像这样的暴发户脚本时..

exec start-stop-daemon --exec /tmp/test.sh --background --start 
Run Code Online (Sandbox Code Playgroud)

我想将pid文件保存在某个地方,然后将其用于stopor restart,对吧?

那么默认创建的pid文件在哪里呢?

ubuntu debian shell bash upstart

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

来自 bash 的便携式守护进程管理(sysvinit/upstart/systemd)

我有一个需要停止服务的小 shell 脚本。这需要在 ubuntu (14.04)、debian 和 Arch 上工作。现在我所做的类似于

   case $(cat /etc/issue) 在 
     *Ubuntu*)
       服务命令
     *Debian*)
       /etc/init.d/servicename 命令
     *拱*)
       systemctl 服务命令
   esac

有没有更好的方法来做到这一点?

bash upstart init.d systemd

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

标签 统计

upstart ×9

bash ×2

django ×2

shell ×2

ubuntu ×2

amazon-ec2 ×1

celery ×1

centos ×1

debian ×1

init.d ×1

nc ×1

netcat ×1

node.js ×1

scripting ×1

ssh ×1

ssh-tunnel ×1

startup ×1

stdin ×1

su ×1

systemd ×1

tomcat ×1