让新贵工作更改其用户 ID 并以非特权用户身份运行脚本的规范方法是什么?
显然可以使用suor sudo,但这似乎很麻烦(并且会生成不必要的日志行)。
在 10.10 中使用 upstart 而不是 sysvinit。
通过删除 /etc/init/blah.conf 中的相应文件,可以删除您不想要的烦人的新贵服务
然而,这似乎是一种严厉的方法。您如何正确配置 upstart 以便能够通过命令行有选择地打开和关闭这些服务?
作为一个实际示例,此处列出的使用 rcconf 关闭 gdm 的答案不再有效: 如何防止 GDM 在 Ubuntu 上启动时运行?
我最近刚刚在服务器上为作为 Upstart 服务运行的 Web 应用程序设置了一个远程 git repo。我想使用 post-receive 挂钩来触发更新应用程序代码所需的操作,然后停止然后重新启动 upstart 服务。这是我的 repo.git/hooks/post-receive 文件:
#!/bin/bash
export GIT_WORK_TREE=/var/www/current/myapp/
echo "Checking out new files and restarting app"
echo $USER
git checkout -f
sudo /sbin/stop myapp-service
sudo /sbin/start myapp-service
Run Code Online (Sandbox Code Playgroud)
根据我在这里读到的信息:askUbuntu.com,让 upstart 命令以 root 身份执行的方法是编辑我的 visudo 文件。这是相关的片段:
%sudo ALL=(ALL:ALL) ALL
admin ALL=(ALL:ALL) NOPASSWD: /sbin/start myapp-service /sbin/stop myapp-service
Run Code Online (Sandbox Code Playgroud)
但是当我 git push 到遥控器时,我得到如下输出:
$ git commit -am "test" && git push prod master
[master 59ffccd] test
1 file changed, 1 insertion(+), 1 deletion(-)
Counting objects: …Run Code Online (Sandbox Code Playgroud) 我有以下 systemd 代码。
[Unit]
Description=start RCC logger server process
Requires=rcc-drbd.service rcc_check_locked_scr.service s96rcc.service
After=rcc-drbd.service rcc_check_locked_scr.service s96rcc.service
[Service]
ExecStart= exec /var/RCC/RCClogger.sh
Restart=no
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
在我尝试运行它的地方,出现以下错误。
Mar 23 04:45:52 localhost.localdomain systemd[1]:
[/etc/systemd/system/rcc_logger.service:7] Executable path is not absolute,
ignoring: exec /v...ogger.sh
Mar 23 04:45:52 localhost.localdomain systemd[1]: rcc_logger.service lacks
both ExecStart= and ExecStop= setting. Refusing.
Run Code Online (Sandbox Code Playgroud)
我知道这是因为没有 exec 命令的绝对路径,但是由于 exec 作为二进制文件不可用,我不能使用绝对路径。如何让这个 ExecStart 运行?
我使用的是 Ubuntu 12.04 LTS,该系统主要使用新贵工作。不幸的是,我的系统还依赖于手动编译的dbmail服务器,它只有一个 init 脚本,但没有 upstart 脚本。
使用update-rc.d dbmail defaults我为所有运行级别安装了 dbmail,但不幸的是它在 MySQL 启动之前启动,因此守护进程再次死亡。我也尝试将其移至 S90 或类似版本,但在运行脚本时仍然无法使用 MySQL。
我尝试向脚本的 LSB 标头添加依赖项,如下所示:
#!/bin/sh
### BEGIN INIT INFO
# Provides: dbmail
# Required-Start: $local_fs $remote_fs $syslog $network mysql
# Required-Stop: $local_fs $remote_fs $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start dbmail services
# Description: Run network services provided by dbmail such as
# imap-server, pop3-server, lmtp-server, timsieve-server
### END INIT INFO …Run Code Online (Sandbox Code Playgroud) 我有以下新贵的工作:
description "posty api"
start on mysql
stop on shutdown
env RACK_ENV=production
setuid vmail
setgid vmail
chdir /opt/posty_api
pre-start script
mkdir -p /var/run/posty
chown -R vmail:root /var/run/posty
end script
exec /usr/local/bin/unicorn -D -c /opt/posty_api/unicorn.rb --env production >> /var/log/posty/upstart.log 2>&1
post-stop exec kill `cat /var/run/posty/unicorn.pid`
respawn
respawn limit 1 10
Run Code Online (Sandbox Code Playgroud)
要在/var/run我需要 root 权限中创建文件夹。如何以 root 身份运行 upstart 作业的某些部分,而以非特权用户身份运行服务本身?
我在 CentOS 上安装了一个软件(GitLab)。它运行良好,但是这个 GitLab 在启动时启动,我不想要那样。所以我查看了一下/etc/init.d以禁用它chkconfig,但我的问题是其中没有gitlab脚本,所以我无法禁用它。
所以这是我的问题:在 CentOS 中还有其他地方可以找到在 CentOS 启动时执行的程序吗?或者更直接地说,如果有人知道如何在不使用的情况下从启动时禁用 GitLab init.d,我很感兴趣!
我根据此处的说明设置了 nginx并且一切顺利,但我无法开始
$ start <my app name>
Run Code Online (Sandbox Code Playgroud)
我创建了/etc/init/nomilkfor.me.conf(这是域名),这是文件中的内容:
description "ubuntu 13.10 on Samsung laptop"
author "zeynel"
start on startup
stop on shutdown
setuid deploy
chdir /deploy
console log
env PORT=4000
exec java -jar my-webapp-0.1.0-standalone.jar
Run Code Online (Sandbox Code Playgroud)
我重新加载nginx
$ sudo nginx -s reload
Run Code Online (Sandbox Code Playgroud)
我尝试
$ start nomilkfor.me
Run Code Online (Sandbox Code Playgroud)
但我明白了
start: Unknown job: nomilkfor.me
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我也尝试打开日志文件,/var/log/upstart但我无法用 nano 打开它们。
编辑
出于某种原因,中的空行nomilkforme.conf抛出“未知节”错误。我删除这些行,改变start on startup以start on (local-filesystems and net-device-up IFACE=eth0) 按本页面现在我得到
z@ubuntu:/$ start nomilkforme
start: Rejected …Run Code Online (Sandbox Code Playgroud) 我将我的服务器更新为 Debian wheezy 并尝试使用它。过了一会儿我想重新启动并遇到错误
shutdown: /run/initctl: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我在网上搜索,发现 initctl 来自 upstart。即使它没有根据 aptitude 安装并且servicesysvinit的命令仍然有效。我很感激任何帮助。
允许非特权用户控制新贵工作的最佳方法是什么?
通过控制一个新贵的工作,我的意思是启动/停止/重新加载/重新启动它:
start myservice
Run Code Online (Sandbox Code Playgroud)
我可以想象一种方法是通过 sudo;需要做些什么才能使这成为可能?还有其他/更好的方法吗?
注意:这个问题虽然名称相似,但与作为非特权用户运行新贵工作有很大不同,因为它涉及实际服务的执行,而不是对工作的控制。