小编ste*_*eve的帖子

将 shell 脚本作为守护进程运行的“正确”方式

我正在编写一个shell 脚本,我想在启动时作为守护程序运行,而不使用daemontoolsdaemonize等外部工具


Linux 守护进程编写 HOWTO

根据Linux Daemon Writing HOWTO,一个合适的守护进程具有以下特征:

  • 来自父进程的分叉
  • 关闭所有文件描述符(即stdin, stdout, stderr
  • 打开日志以进行写入(如果已配置)
  • 工作目录更改为持久目录(通常为/
  • 重置文件模式掩码(umask)
  • 创建唯一的会话 ID (SID)

daemonize简介

守护进程介绍更进一步,指出一个典型的守护程序也:

  • 与其控制终端(如果有)解除关联并忽略所有终端信号
  • 与其进程组分离
  • 把手 SIGCLD

我将如何做到这一切的shdashbash只用普通的Linux工具脚本?

该脚本应该能够在尽可能多的发行版上运行而无需额外的软件,尽管Debian是我们的主要关注点。


注意:我知道StackExchange网络上有很多建议使用nohup …

linux debian shell-script daemon

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

如何确定 ext4 和 btrfs 文件系统的块大小?

我正在寻找能够告诉我 ext4 与 btrfs 格式化驱动器上的分配量的命令。

背景:我正在使用一个备份系统,允许用户恢复单个文件。该系统仅使用rsync,没有服务器端软件,备份未压缩。结果是我有一些 3.6TB 的文件,其中大部分都很小。

对于我的数据集来说,LVM 下的 btrfs 卷上的存储效率似乎比普通的旧 ext4 卷上低得多,我怀疑这与最小文件大小以及块大小有关,但我有无法弄清楚如何获得这些尺寸以进行比较。btrfs wiki 说它使用“页面大小”,但我没有找到任何关于获取该数字的信息。

linux filesystems backup ext4 btrfs

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

Arch Linux 安装 Grub 问题

我正在安装 arch Linux 并输入了命令

grub-mkconfig -o /boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)

它回应了

WARNING: Failed to connect to lvmetad. Falling back to device scanning.
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

arch-linux

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

如何添加额外的登录步骤?

我想要实现的是一个交互式程序,它在询问用户密码之前或之后运行,但除非成功退出,否则不会处理对计算机的访问。为了让它更容易理解,这里有一个例子:

我想访问我的计算机,首先输入我的用户名,然后是我的密码,然后正确回答一个简单的随机生成的数学问题。

为此,我使用以下系统身份验证文件:

auth      required  pam_unix.so try_first_pass nullok nodelay
auth      optional  pam_faildelay.so delay=600000
auth      optional  pam_exec.so stdout /home/math
auth      optional  pam_permit.so
auth      required  pam_env.so
Run Code Online (Sandbox Code Playgroud)

问题是,名为 math 的程序无法处理来自用户的输入,因为它会自动从 PAM 读取 EOF,这实际上使其无用。我还尝试了可疑行的以下变体,在这种情况下,它会读入密码,这也不是我想要的:

auth      optional  pam_exec.so stdout expose_authtok /home/math
Run Code Online (Sandbox Code Playgroud)

linux login authentication pam

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

无法挂载 btrfs 文件系统“open_ctree 失败”

无法挂载 btrfs 文件系统。最初在运行 xbian 的服务器上创建。尝试安装在最新的 OpenSUSE 42.2 服务器上。抱怨不支持的功能 0x10,open_ctree 失败。

我怎样才能挂载这个文件系统?

挂载尝试

# file -s /dev/sdc2
/dev/sdc2: BTRFS Filesystem (label "xbian", sectorsize 4096, nodesize 16384, leafsize 16384)
# mount -t btrfs /dev/sdc2 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/sdc2,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.
#
Run Code Online (Sandbox Code Playgroud)

消息输出

[  119.698406] BTRFS info (device sdc2): disk space caching is enabled …
Run Code Online (Sandbox Code Playgroud)

mount btrfs

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

在shell中将值从科学记数法转换为十进制?

如何在shell中将值从科学记数法转换为十进制?(首选C shell)

另外我想将它从 e-12 转换为 e-9 然后 shell

42.53e-12 到 0.04253。我必须这样做才能列出清单。

shell sed awk csh

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

使用文件日期/时间作为元数据:可靠吗?

背景:我在自己的目录中有一组文件,我按照文件名的顺序将它们合并到一个文件中。我称它们为t1.txt, t2.txt, t3.txt...我按照整数的顺序合并它们。

情况:出于各种原因,我想摆脱文件名作为以后文件合并操作的元数据。

行动:我正在考虑转移到一个文件合并系统,该系统按文件创建日期/时间对文件合并进行排序(显然,我必须按照以后合并的顺序创建文件)。

题:

  1. 日期/时间排序的文件合并是否可靠?有隐藏的哥特式吗?某些文件的创建间隔仅为十分之一秒,或者更少——这是跟腱愈合吗?

  2. 我应该考虑订购合并是否有不同的东西。

日期/时间对我来说似乎很基本。OTH,一开始看起来简单直接的事情往往最终比想象的要复杂。所以我问。

filesystems filenames timestamps files

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

为什么/run/user/1000的权限不对

我的/run/user/1000目录由 root 拥有 - 据我了解,它应该由我的用户拥有 - 当我收到此错误时,我无法启动任何快照程序(例如,slack):mkdir: cannot create directory \xe2\x80\x98/run/user/1000/snap.slack\xe2\x80\x99: Permission denied - 我也认为是什么导致了这个问题也可能导致我的音频无法工作。

\n\n

这两个问题都可以在启动后chown修复pulseaudio -k && sudo alsa force-reload但我想弄清楚我在这里做错了什么。

\n\n

我运行的是 Ubuntu 19.10

\n

ubuntu permissions snap

6
推荐指数
0
解决办法
3122
查看次数

Linux 的 Datecalc 等效项

我在 ksh 中使用脚本来获取今天datecalc在 Solaris 10 服务器上使用的 91 天之前的日期。在 Linux 中与此等效的是什么?

month=`datecalc -a $(date +"%Y %m %d") - 1 |awk {'print $2'}`
day=`datecalc -a $(date +"%Y %m %d") - 91 |awk {'print $3'}`
year=`datecalc -a $(date +"%Y %m %d") - 1 |awk {'print $1'}`
Run Code Online (Sandbox Code Playgroud)

shell-script date

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

多台服务器并行执行sh脚本

我正在尝试在循环中的多个服务器中执行操作,但我想在第一个服务器中启动我的操作并直接转到第二个,而无需等待第一个完成。

HOSTS="host1 host2"
    For hostname in ${HOST} ;
do ssh -tt ${USERNAME}@${hostname} << EOF
actions
exit
EOF
Done 
Run Code Online (Sandbox Code Playgroud)

任何人都有想法在 linux sh bash 中做到这一点?

先感谢您。

remote-management shell-script pdsh

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