我需要为 IRC 记录器创建一个初始化脚本。我复制了/etc/init.d/skeleton。我填写了配置部分以满足我的需要,并且我还必须将 --background 添加到 start daemon 命令,因为我的 IRC 记录器不会分离。当我使用我的 init 脚本时,记录器可以正常启动,但它不会像它应该的那样创建 .pid 文件。因此,除非我自己找出进程 ID 并杀死它,否则进程无法停止。这是脚本:
#! /bin/sh
### BEGIN INIT INFO
# Provides: skeleton
# Required-Start: $remote_fsh
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO
# Author: Cory Walker <cwalker32@gmail.com>
#
# Please remove the "Author" lines above and …Run Code Online (Sandbox Code Playgroud) 我有一个想要守护进程的 Perl 脚本。基本上这个 perl 脚本将每 30 秒读取一个目录,读取它找到的文件,然后处理数据。为了简单起见,请考虑以下 Perl 脚本(称为 synpipe_server,在 中有此脚本的符号链接/usr/sbin/):
#!/usr/bin/perl
use strict;
use warnings;
my $continue = 1;
$SIG{'TERM'} = sub { $continue = 0; print "Caught TERM signal\n"; };
$SIG{'INT'} = sub { $continue = 0; print "Caught INT signal\n"; };
my $i = 0;
while ($continue) {
#do stuff
print "Hello, I am running " . ++$i . "\n";
sleep 3;
}
Run Code Online (Sandbox Code Playgroud)
所以这个脚本基本上每 3 秒打印一次。
然后,因为我想守护这个脚本,我也把这个 bash 脚本(也称为 synpipe_server)放在/etc/init.d/:
#!/bin/bash
# synpipe_server …Run Code Online (Sandbox Code Playgroud) 在 RedHat 系统上,我试图用一个没有任何 shell 的不同用户启动一个程序。在 /etc/passwd 中,shell 是 /sbin/nologin。
我试过了:
su myuser -c /home/myuser/script.sh 结果:此帐户当前不可用。
使用 chown 和 setuid: chown myuser:mygroup /home/myuser/script.sh chmod +s /home/myuser/script.sh /home/myuser/script.sh 结果:script.sh 仍然作为我的登录用户执行(根)。
我试图弄清楚为什么 runit 无法启动或给我托管应用程序的状态。在 Ubuntu 12.04 上运行。
我创建了 /service、/etc/sv/myapp(其中包含一个运行脚本、一个配置文件、一个日志文件夹和一个运行脚本)。我创建了一个从 /service/ 到 /etc/sv/myapp 的符号链接
当我跑
sudo sv s /service/*
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
warning: /service/myapp: unable to open supervice/ok: file does not exist
Run Code Online (Sandbox Code Playgroud)
我的一些谷歌搜索显示,据说重新启动 svscan 服务可能会解决这个问题,但杀死它并运行 svscanboot 并没有什么区别。
有什么建议?我在这里的某个地方错过了一步吗?
我似乎无法弄清楚为什么 supervisord 不会以非 root 用户身份运行。如果我在用户设置为 jason (pid 1000) 的情况下启动它,我会在日志文件中得到以下信息:
2010-05-24 08:53:32,143 CRIT Set uid to user 1000
2010-05-24 08:53:32,143 WARN Included extra file "/home/jason/src/tsched/celeryd.conf" during parsing
2010-05-24 08:53:32,189 INFO RPC interface 'supervisor' initialized
2010-05-24 08:53:32,189 WARN cElementTree not installed, using slower XML parser for XML-RPC
2010-05-24 08:53:32,189 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2010-05-24 08:53:32,190 INFO daemonizing the supervisord process
2010-05-24 08:53:32,191 INFO supervisord started with pid 3444
Run Code Online (Sandbox Code Playgroud)
...然后该过程因某种未知原因而终止。如果我在没有 sudo 的情况下启动它(在用户 jason 下),我会得到类似的输出:
2010-05-24 08:51:32,859 INFO supervisord …Run Code Online (Sandbox Code Playgroud) 我有一个 http 守护进程服务器进程 (yaws),我希望服务器使用 002 的 umask 写入任何新文件,以便同一组中的另一个用户可以修改、移动或删除由守护进程创建的文件。这是在 Ubuntu 10.04 上。
与Apache不同,yaws没有umask的配置选项,那么有什么方法可以设置任何守护进程的umask呢?
我找到了关于将 init 脚本更改为 add 的答案umask 002。这确实有效,但我不确定编辑 init 脚本是在多台机器上轻松记录和配置的最佳方式。
我还发现参考pam_umask模块这里。看起来这允许在 /etc/passwd 的 GECOS 字段中配置 umask 的每个用户设置。
还有其他方法可以为守护进程设置 umask 吗?推荐的方式是什么?
我正在运行 Ubuntu 10.10:
uname -a
Linux mt-xps 2.6.35-22-generic #35-Ubuntu SMP Sat Oct 16 20:45:36 UTC 2010 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
当我运行 top 时,我偶尔会看到“kslowd000”或类似的进程出现在 top CPU 使用率列表中。我试过谷歌搜索 kslowd,但没有找到它是什么的解释。联机帮助页也无济于事。
它有什么作用 ?我怎么会发现自己?
我正在尝试在不同的用户下守护进程。
在我的 init.d 中,我有一个看起来像这样的服务:
...
start() {
echo "Starting mydaemon..."
daemon --user someuser --name mydaemon mycommand
}
...
Run Code Online (Sandbox Code Playgroud)
(整个脚本在这里:http : //pastebin.com/bvpnsHgn)
但是,我得到的只是daemon: command not found.
我检查了daemon()在 中声明的内容/etc/init.d/functions,但是,我似乎无法使用它。
我该如何解决这个问题?
我有一个访问某些服务(db 等)的 linux 守护进程。为此,它需要一些密码。以安全的方式将密码提供给守护进程的最佳方式是什么?
我目前将密码存储在 root-read-only 配置文件中,但依赖权限似乎相当不安全。
我正在考虑在守护程序启动时提示用户输入密码并将密码仅存储在内存中。当然,这对于具有 root 访问权限的专用攻击者来说只是一个小障碍,但至少它可以保护备份、快照等,并且可能会争取一些时间。
其他选择?推荐?
我在为一个简单的守护进程编写单元文件时遇到了这个问题。当守护进程在启动时返回 '1' 时,systemd 只是忽略它,看起来守护进程已经成功启动,而实际上它已经死了。
例如,我有非常简单的 shell 脚本:
#!/bin/bash
exit 1
Run Code Online (Sandbox Code Playgroud)
所以单元文件看起来像这样:
[Unit]
Description=test service
After=syslog.target
[Service]
User=testuser
Group=testuser
ExecStart=/usr/local/bin/return1
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
尝试开始,似乎没问题:
# service testservice start
# echo $?
0
Run Code Online (Sandbox Code Playgroud)
但实际上它已经死了:
# service testservice status
? testservice.service - test service
Loaded: loaded (/etc/systemd/system/testservice.service; enabled)
Active: failed (Result: exit-code) since Fri 2016-01-22 14:51:45 MSK; 1min 13s ago
Process: 16416 ExecStart=/usr/local/bin/return1 (code=exited, status=1/FAILURE)
Main PID: 16416 (code=exited, status=1/FAILURE)
Jan 22 14:51:45 servername systemd[1]: Started test service.
Jan 22 14:51:45 servername systemd[1]: testservice.service: …Run Code Online (Sandbox Code Playgroud)