我正在尝试yum update
在 RHEL 7.4之后重新启动服务。我可以使用 systemctl 重新启动每个服务,但是needs-restarting
fromyum utils
告诉我我也应该重新启动 systemd 本身:
# needs-restarting
1 : /usr/lib/systemd/systemd --system --deserialize 21
Run Code Online (Sandbox Code Playgroud)
我可以在systemd
不重新启动服务器的情况下重新启动吗?如何重新启动?
我发现了一些关于 的提及systemctl daemon-reload
,但这并没有使它从需要重新启动列表中消失。
> cd /tmp
> ln -s foo
> ls -alhF /tmp
lrwxrwxrwx 1 user user 3 Jul 29 14:00 foo -> foo
Run Code Online (Sandbox Code Playgroud)
这是一个错误ln
还是有一个将文件符号链接到自身的用例?
这是与coreutils 8.21-1ubuntu5.1
.
/lib
和/usr/lib
和有什么不一样/var/lib
?有些文件是“复制”其他目录内容的符号链接。
为什么file xxx.src
导致cannot open `xxx.src' (No such file or directory)
但退出状态为 0(成功)?
$ file xxx.src ; echo $?
xxx.src: cannot open `xxx.src' (No such file or directory)
0
Run Code Online (Sandbox Code Playgroud)
注意:比较ls
:
$ ls xxx.src ; echo $?
ls: cannot access 'xxx.src': No such file or directory
2
Run Code Online (Sandbox Code Playgroud) 如手册页所述,
systemctl --now enable servicename
Run Code Online (Sandbox Code Playgroud)
应该启用并启动服务。
但在许多不同的发行版下,它对我来说从来没有用过。
而输出:
systemctl is-enabled
启用,
systemctl is-active
该服务仍处于非活动状态。
这个开关有什么用?
我尝试过其他组合,例如:
systemctl enable --now servicename
Run Code Online (Sandbox Code Playgroud)
和:
systemctl enable servicename --now
Run Code Online (Sandbox Code Playgroud)
但还是一样;我systemctl start servicename
每次都必须手动,即使上一个命令(即enable
部件)成功执行。
应用程序对systemd服务的实现是否应该支持它在单元文件中的某处实现该功能;许多知名服务没有遵循,这让我认为它完全无用;我假设考虑过它。
我希望我的 USB 文件系统在我连接设备时自动挂载。
如何使用systemd
via设置自动挂载/etc/fstab
?
当一个进程中断时,我知道不会再返回任何输出。但总是在中断ping
命令之后,我们有执行的统计信息,据我所知,这是输出的一部分。
amirreza@time:~$ ping 4.2.2.4
PING 4.2.2.4 (4.2.2.4) 56(84) bytes of data.
64 bytes from 4.2.2.4: icmp_seq=1 ttl=51 time=95.8 ms
64 bytes from 4.2.2.4: icmp_seq=2 ttl=51 time=92.3 ms
^C
--- 4.2.2.4 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 92.321/94.052/95.783/1.731 ms
amirreza@time:~$
Run Code Online (Sandbox Code Playgroud)
它是如何工作的?
我有一个脚本来测量某个命令执行的时间。
它需要“真实”time
命令,意思是一个二进制文件,例如 in /usr/bin/time
(因为 bash 内置没有-f
标志)。
下面是一个可以调试的简化脚本:
#!/bin/bash
TIMESEC=$(echo blah | ( /usr/bin/time -f %e grep blah >/dev/null ) 2>&1 | awk -F. '{print $1}')
echo ABC--$TIMESEC--DEF
if [ "$TIMESEC" -eq 0 ] ; then
echo "we are here!"
fi
Run Code Online (Sandbox Code Playgroud)
另存为“test.sh”并执行:
$ bash test.sh
ABC--0--DEF
we are here!
Run Code Online (Sandbox Code Playgroud)
所以它奏效了。
现在,让我们尝试通过在 bash 命令行中添加“-x”来调试它:
$ bash -x test.sh
++ echo blah
++ awk -F. '{print $1}'
+ TIMESEC='++ /usr/bin/time -f %e grep blah
0'
+ echo ABC--++ …
Run Code Online (Sandbox Code Playgroud) 我想编写自己的systemd
单元文件来管理真正长时间运行的命令1(以小时为单位)。在查看关于 systemd的ArchWiki 文章时,它说明了以下关于选择启动类型的内容:
Type=simple
(默认):systemd 认为服务会立即启动。进程不能 fork。如果需要在此服务上订购其他服务,请不要使用此类型,除非它是套接字激活的。
为什么进程根本不能分叉?它是指以守护进程召唤过程(父分叉,然后退出)的风格进行分叉,还是任何类型的分叉?
1我不想要 tmux/screen,因为我想要一种更优雅的方式来检查状态和重新启动服务,而无需求助于tmux send-keys
.