AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[upstart](server)

Martin Hope
DevOpsSauce
Asked: 2021-07-03 07:33:51 +0800 CST

如何从具有多个服务的新贵脚本创建 systemd“全部启动”模板单元文件?

  • 0

我正在将所有自定义新贵脚本迁移到 systemd。我遇到了一个使用多种服务的脚本。我无法弄清楚处理这个问题的正确语法,或者我是否需要.service为每个文件创建单独的单元文件。这可以用于模板吗?SystemD单元文档没有给我太多信息,除了如何创建模板文件(附加@到名称)以及如何使用%i来表示实例。

最初的暴发户dealer-start-all.conf

console log
start on dealer-start
script
    declare -a dealers=("TimeZone" "Timeout" "Inquiry" "Refuse")

    for type in "${dealers[@]}"
    do
        if initctl list | grep "^dealer ($type)"
        then
            stop dealer type=$type
        fi
        start dealer type=$type
        echo "dealer$type started"
    done
end script

它的另一部分dealer.conf,应该通过%i在该ExecStart部分中使用而被很好地切割和干燥,例如:

ExecStart=/usr/bin/php -f /path/to/dealer%i.php

console log

instance $type

stop on dealer-stop

script
        sudo -u root php -f /path/to/dealer$type.php
end script

post-stop script

if [ -z "$UPSTART_STOP_EVENTS" ]
    then
        echo "dealer$type stopped at `date +"%F %T.%N"` Run 'initctl emit dealer-stop' then 'initctl emit dealer-start' on `hostname` to get it running again." | mail -s "dealer$type Stopped" [email protected]
    else
        echo "dealer$type was manually stopped at `date +"%F %T"`."
fi
end script

我只是不明白如何将第一个中的数组转换为 systemd 版本?我应该把这些分解成单独的单元文件吗?如果是这样,那么这不是问题并且可以轻松完成。我只是不确定语法(如果存在)来做第一个正在做的事情。

ubuntu systemd upstart
  • 1 个回答
  • 243 Views
Martin Hope
James Simpson
Asked: 2017-01-03 06:44:21 +0800 CST

Mongod 在 Ubuntu 14.04 上陷入停止/等待

  • 0

我按照文档在 Ubuntu 14.04 上安装了 MongoDB。它运行和工作正常,除了它每隔几个小时就会神秘地停止,并且需要手动重启service mongod restart才能重新开始。发生这种情况时,mongod.log 中没有任何内容。

此外,当我重新启动然后检查状态时service mongod status,它会给我mongod stop/waiting一个事件,尽管应用程序能够连接到它。我一直在寻找如何调试它,但被困在这一点上。

ubuntu mongodb ubuntu-14.04 upstart
  • 2 个回答
  • 1791 Views
Martin Hope
Neeraj Kumar
Asked: 2016-12-07 23:31:28 +0800 CST

新贵和 LD_LIBRARY_PATH

  • 0

我是新贵,需要通过它开始一个过程。但是我收到如下所述的错误。

我的脚本内容

description "Server"
author "Neeraj"

expect fork

respawn
respawn limit 5 10

console log

pre-start script
    echo "`/bin/date -u`: start myappname"
end script

script
    env LD_LIBRARY_PATH=/var/packages/myapp/target/bin
    export LD_LIBRARY_PATH
    exec /var/packages/myapp/target/bin/myappname --local-path=/var/lib/myapp
end script

post-stop script
    echo "`/bin/date -u`: stop myappname"
end script

执行脚本后出错

bash-4.3# cat /var/log/upstart/pkg-myappname.log
2016-12-07T15:15:11+0800 Wed Dec  7 07:15:11 UTC 2016: start myappname
2016-12-07T15:15:11+0800 TERM=vt102
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
PWD=/
SHLVL=1
UPSTART_INSTANCE=
UPSTART_JOB=pkg-myappname
_=/bin/env
LD_LIBRARY_PATH=/var/packages/myapp/target/bin
LD_LIBRARY_PATH
2016-12-07T15:15:11+0800 /var/packages/myapp/target/bin/myappname: error while loading shared libraries: libhttp.so: cannot open shared object file: No such file or directory
bash-4.3# vi /etc/init/pkg-myappname.conf
bash-4.3# cat /var/log/upstart/pkg-myappname.log
2016-12-07T15:15:11+0800 Wed Dec  7 07:15:11 UTC 2016: start myappname
2016-12-07T15:15:11+0800 TERM=vt102
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
PWD=/
SHLVL=1
UPSTART_INSTANCE=
UPSTART_JOB=pkg-myappname
_=/bin/env
LD_LIBRARY_PATH=/var/packages/myapp/target/bin
LD_LIBRARY_PATH
2016-12-07T15:15:11+0800 /var/packages/myapp/target/bin/myappname: error while loading shared libraries: libhttp.so: cannot open shared object file: No such file or directory

问题是我的可执行文件依赖于我已将 LD_LIBRARY_PATH 设置为正确位置的一些共享库。但是一旦执行调用发生,它就看不到 LD_LIBRARY_PATH 位置并报告错误。

知道我在这里做错了什么吗?

upstart
  • 1 个回答
  • 373 Views
Martin Hope
zeros-and-ones
Asked: 2016-07-06 11:02:27 +0800 CST

在 AWS-AMI linux 上重新启动后启动进程的正确方法

  • 0

我试图确保我的队列系统在服务器重新启动时不会失败。PHP 处理的队列系统通过命令行命令启动。Laravel 文档建议安装一个名为 supervisord 的进程监视器,它在我的 EC2 上表现不佳,所以我想知道是否有另一种方法可以确保我的命令在重启时运行。AWS AMI linux 带有旧版本的 Upstart 和 chkconfig,但是我也无法使其正常工作。有什么建议么?我是否需要创建一个初始化脚本和 RPM 或者这里是不是有点矫枉过正?

amazon-web-services amazon-ami upstart
  • 1 个回答
  • 113 Views
Martin Hope
KittMedia
Asked: 2016-07-05 22:59:04 +0800 CST

使用“服务”命令初始化脚本无法正常工作

  • 1

我有以下启动脚本,它应该以分离模式启动或停止屏幕:

#!/bin/sh

# node2
# Maintainer: @KittBlog
# Authors: [email protected]

### BEGIN INIT INFO
# Provides:          node2
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: node2 in screen detached mode
# Description:       node2 in screen detached mode
# chkconfig: - 85 14
### END INIT INFO
NODE_NAME=node2
SCREEN=$(which screen)
SCRIPT_PATH=/home/jail/

do_start() {
    if !($SCREEN -r | grep -o "[0-9]*\.$NODE_NAME"); then
        $SCREEN -S $NODE_NAME -d -m $SCRIPT_PATH/start-npm.sh
    fi
}

do_stop() {
    for session in $($SCREEN -r | grep -o "[0-9]*\.$NODE_NAME"); do
        $SCREEN -S "${session}" -X quit
    done
}

case "$1" in
    start|stop)
        do_$1
        ;;
    restart)
        do_stop
        do_start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
        ;;
esac
exit 0

如果我手动启动脚本或通过调用/etc/init.d/node2 {start|stop|restart}.

除了 if 子句被忽略之外, using 也可以service node2 start正常工作,因此即使已经有一个新屏幕,也总是会分离一个新屏幕。

问题是那service node2 stop行不通。我知道service在“可预测的环境”中运行脚本。这里有问题吗?我不能使用$SCREEN -r | grep -o "[0-9]*\.$NODE_NAME"来确定此环境中是否已经存在活动屏幕吗?

service gnu-screen upstart
  • 1 个回答
  • 462 Views
Martin Hope
Andrew Porritt
Asked: 2016-05-26 07:32:34 +0800 CST

在新贵脚本中启动 ssh-agent 时防止重复

  • 1

作为 Upstart 脚本的一部分,我需要启动 ssh-agent 来加载 GitHub 部署密钥,所以在脚本中我有:

eval "$(ssh-agent -s)"
ssh-add $HOME/.ssh/id_rsa

问题是,当服务重新启动时,ssh-agent 会重新启动,让我运行多个副本。我很确定这是因为重新运行脚本时环境变量丢失了。我尝试了以下方法:

script
    ...
    # Ensure SSH agent is running
    if [ -z "$SSH_AUTH_SOCK" ]; then
            eval "$(ssh-agent -s)" >/dev/null
            ssh-add $HOME/.ssh/id_rsa
            initctl set-env --global SSH_AUTH_SOCK=$SSH_AUTH_SOCK
            initctl set-env --global SSH_AGENT_PID=$SSH_AGENT_PID
            initctl set-env --global SSH_AGENT_LAUNCHER=upstart
    fi

exec ...
...
end script

post-stop script

    # Shut down SSH agent
    if [ "$SSH_AGENT_LAUNCHER" = upstart ]; then
            kill $SSH_AGENT_PID 2>/dev/null || true
            initctl unset-env --global SSH_AUTH_SOCK
            initctl unset-env --global SSH_AGENT_PID
            initctl unset-env --global SSH_AGENT_LAUNCHER
    fi

end script

这里的问题是我setuid在脚本中有一个,所以initctl不允许调用,因为用户没有所需的权限。有没有一种简单的方法可以从脚本中导出环境变量,以便它们在停止后脚本中可用,或者将它们写入文件并在停止后获取该文件是最好的方法?

ubuntu ssh-agent upstart
  • 1 个回答
  • 376 Views
Martin Hope
fadedbee
Asked: 2016-02-09 03:56:11 +0800 CST

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

  • 0

我正在使用以下/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

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

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

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

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

PS 我很好,这一次只会听一个客户。

upstart
  • 2 个回答
  • 15165 Views
Martin Hope
Aleksei Matiushkin
Asked: 2015-08-26 22:48:01 +0800 CST

ubuntu 上的 sidekiq 未能阻止暴发户

  • 0

我完全按照wiki 中的说明为 sidekiq 安装了一个新贵服务。

也就是说,我有一个新贵脚本,它创建一个进程:

# skipped other insstructions
script
exec /bin/bash <<'EOT'
  source /home/me/.my_env
  cd /home/me
  exec bin/sidekiq -e production
EOT
end script

服务完美启动,但正如人们所见,sidekiq 的 PID 不等于已知的 PID upstart。

» initctl status sidekiq
# sidekiq start/running, process 16020
» ps axww|grep sidekiq
# 16181 ?        Sl     0:41 sidekiq 3.0.0 me[0 of 3 busy]

该配置适用于除 sidekiq 之外的任何其他新贵脚本:

» sudo initctl stop sidekiq
# sidekiq stop/waiting
» ps axww|grep sidekiq
# 16181 ?        Sl     0:45 sidekiq 3.0.0 me[0 of 3 busy]

似乎initctl杀死了 bash 进程,将其视为工作(16020),但底层sidekiq继续存在:

» ps axww|grep  '16181\|16020'
# 16181 ?        Sl     0:45 sidekiq 3.0.0 me[0 of 3 busy]

我究竟做错了什么?

upstart
  • 2 个回答
  • 570 Views
Martin Hope
Saravana Kumar
Asked: 2015-08-12 08:45:08 +0800 CST

Upstart 脚本与 sudo 一起运行良好,但作为 root 用户失败

  • 0

我有一个简单的 nodeJs 新贵服务运行,

script
  exec /usr/bin/node /path/to/server.js
end script

在使用 sudo 命令运行时,它可以工作

~$ sudo service upserv start
sg_gui_server start/running, process 19321

当它以 root 用户身份运行时,它会因奇怪的错误而失败。

~$ sudo su
sk# service sg_gui_server restart
karaf: JAVA_HOME not set; results may vary

JAVA_HOME 未设置,此错误很奇怪,因为 nodeJs 不依赖于 java 库,并且当我运行简单的 python 服务器时也会出现此错误。

以 sudo 前缀运行服务与以 root 用户身份运行服务有何不同?

upstart
  • 1 个回答
  • 168 Views
Martin Hope
Witek
Asked: 2014-06-13 11:13:17 +0800 CST

创建文件时重新启动服务的 Upstart 脚本

  • 0

我在 /etc/init 中创建了自己的 upstart 脚本,我可以启动和停止它。

现在我希望当文件(/etc/my-app/restart-requested.txt)存在(或更好地被触摸)时重新启动该服务。

我以前的 /etc/init.d/ 服务的解决方案是一个 cron 作业,它定期检查重新启动文件并在文件存在时调用重新启动。

新贵有更好的解决方案吗?

upstart
  • 2 个回答
  • 665 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve