标签: bash

Stdout/stderr 在 start-stop-daemon 中重定向

我正在尝试编写init配置,将我的守护进程的输出重定向到两个文件(对于 stdout 和 stderr)。问题是,它不起作用。我现在正在读这个

所以,我已经完成了这个 shell 脚本来测试这种方法。它不起作用:

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Seed kurokikaze starter"
#NAME=node
DAEMON="/etc/node-version/0.1.99/bin/node"
DAEMON_ARGS="/etc/seed/kurokikaze/server.js"
DAEMON_DIR="/etc/seed/kurokikaze"

APPLOG_FILE="/var/log/seed/kurokikaze"
ERRLOG_FILE="/var/log/seed/kurokikaze-err"

PIDFILE="/var/run/seeds/kurokikaze.pid"
SCRIPTNAME="/etc/seed-init/kurokikaze"

NCMD="exec $DAEMON $DAEMON_ARGS 1>>$APPLOG_FILE 2>>$ERRLOG_FILE"

start-stop-daemon -Sbmv --pidfile $PIDFILE --chdir ${DAEMON_DIR} --exec $DAEMON --startas /bin/sh -- $NCMD
Run Code Online (Sandbox Code Playgroud)

但是,如果您在没有将守护程序包装在单独的 shell 中的情况下启动它,它会按预期工作(只是没有 stderr/stdout 重定向):

start-stop-daemon -Sbmv --pidfile $PIDFILE --chdir ${DAEMON_DIR} --exec $DAEMON -- ${DAEMON_ARGS}
Run Code Online (Sandbox Code Playgroud)

问题是:为什么第一个脚本不起作用?系统是Debian Lenny,start-stop-daemon版本是1.14.29

debian bash

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

如何删除 bash 脚本的某个符号

我有一个 bash 脚本,可以在其中获取磁盘使用情况,例如60%. 如何删除%符号?使用 grep 还是 awk?

scripting linux bash grep awk

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

rsync:如何仅在最顶层目录中排除 Dotfiles?

在 Bash 下使用 执行备份时rsync,我试图排除顶级目录中的所有点文件和隐藏目录,但排除其他目标目录中的那些。例如:

/copyme.c  
/.dontcopythisfile  
/.dontcopythisdirectory/or_its_contents  
/directory/.butcopymetoo
Run Code Online (Sandbox Code Playgroud)

rsync -a --include=".includeme" --exclude=".*" . DEST无法复制子目录中所需的点文件,但诸如此类的变体--exclude="./.*"也失败。

建议?这是否需要过滤规则而不是更简单的规则--exclude

bash rsync regex

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

bash 为指定的开始和结束字符提取子字符串

例如,我有一个包含此条目的日志文件:

[2012 年 8 月 8 日星期三 11:39:41] [错误] [客户端 155.94.70.224] ModSecurity:[文件“/etc/httpd/modsecurity.d/rules/base_rules/modsecurity_crs_20_protocol_violations.conf”] [行“271”] [ id "960020"] [rev "2.2.5"] [msg "Pragma Header 需要 Cache-Control Header for HTTP/1.1 请求。"] [severity "NOTICE"] [tag "RULE_MATURITY/5"] [tag "RULE_ACCURACY/ 7"] [标签 " https://www.owasp.org/index.php/ModSecurity_CRS_RuleID-960020 "] [标签 "PROTOCOL_VIOLATION/INVALID_HREQ"] [标签 " http://www.bad-behavior.ioerror.us/文档/它是如何工作的/ “] 警告。REQUEST_PROTOCOL 处的字符串匹配“HTTP/1.1”。[主机名“webmail.white-art.co.uk”] [uri“/horde/themes/graphics/tree/plusonly.

我想提取所有以字符开头[并以]. 我可以使用 cut 或 awk 使用单个分隔符进行提取,但我需要在开始[和结束之间提取字符串]。如何实现呢?

例如,我需要提取:

“[标签“RULE_ACCURACY/7”]”

“[严重性“注意”]”

从日志中。


我找到了一个解决方案,首先我必须通过在每个之后添加新行]然后使用 grep 搜索所需的字符串来分解日志。有没有更好的方法来做到这一点?

bash awk sed

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

在 Debian 服务器上创建受限用户

我想为我的 debian 服务器上安装的每个关键程序创建一个用户帐户。例如,对于以下程序:

Tomcat Nginx 主管 PostgreSQL

根据我在网上的阅读,这似乎是推荐的。但是,我想尽可能地限制这些用户帐户,以便他们没有 shell 登录名,无法访问其他程序,并且尽可能地受到限制但仍然可以使用。

有人介意告诉我这是如何实现的吗?到目前为止,我的阅读表明:

echo "/usr/sbin/nologin" >> /etc/shells
useradd -s /usr/sbin/nologin tomcat
Run Code Online (Sandbox Code Playgroud)

但我认为可能有更完整的方法。

编辑:我正在使用 debian 挤压

security shell bash user-accounts

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

如何使用bash将输入从一个脚本传递到另一个脚本

我正在编写一个脚本,我想在其中启动 mysql_secure_installation脚本并在每个提示处提供适当的答案。我尝试使用这样的回声:

echo -e "\n\n$db_pass\n$db_pass\n\n\n\n\n" | /usr/bin/mysql_secure_installation
Run Code Online (Sandbox Code Playgroud)

它不完全起作用。它似乎正确回答了最后 5 个问题,但没有正确回答前 3 个问题(这是在一个CentOS 6.5盒子上)。这是输出:

In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

stty: standard input: Invalid argument
Enter current password for root (enter for none):
stty: standard input: Invalid argument
OK, successfully used …
Run Code Online (Sandbox Code Playgroud)

mysql bash centos6

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

如何确定 OpenSSL 证书是否由某个私钥创建?

我有一个 OpenSSL 证书。我也需要私钥。有人告诉我它位于服务器上的某个地方,确实如此,我发现了多个 SSL 密钥文件。

在我通过蛮力尝试所有这些之前:有没有办法在终端上找出是否使用私钥来创建证书?

bash openssl ssl-certificate private-key

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

遍历服务器列表的更好方法

我经常做一些事情,我循环遍历服务器列表以采取一些行动。例如:

for s in `cat servers.txt` ; do
    echo; echo $s
    ssh $s 'do something'
done
Run Code Online (Sandbox Code Playgroud)

我想知道(从 shell 的角度)是否有比 cat servers.txt

是的,我知道 mcollective、capistrano 等工具 - 我经常这样做是为了解决 mcollective 问题:-)

ssh shell bash mcollective

7
推荐指数
4
解决办法
3万
查看次数

通过 ssh 运行本地脚本

从服务器 A 到服务器 B(以及大约 500 台其他服务器)设置了无声 ssh
我在服务器 A(shell 和 perl)上编写了一个脚本,我想通过服务器 B(和其他 500 台服务器)上的 ssh 执行该脚本。这可能吗 ?我能够使用静默 ssh 运行命令,但不确定如何运行整个脚本。

ssh bash

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

在 tar 中如何排除目录内容但保留空目录

我想创建一个 tar 文件,排除某些具有许多子文件夹和文件的文件夹,但只保留被排除的主文件夹。解释:

-project
  |-dir1
  |-dir2
  |-cache
  |-logs
  |-dir3
  --dir4
Run Code Online (Sandbox Code Playgroud)

我希望我的 tar 排除缓存和日志内容(文件和文件夹),但在 tar 文件中保留这个空文件夹。

如果我使用 --exclude=project/cache 它会从文件中排除文件夹。我怎样才能做到这一点 ?

linux bash tar

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