通常不在这里发帖,但我正在为这个发帖。我有一个 Python 脚本,它在启动时分叉,并负责启动一堆其他进程。这个脚本曾经在启动时sysvinit通过systemd.
不幸的是,我遇到了一个无法解决的问题。当您直接在用户 shell 中启动脚本时,它会正确启动它的子进程,而当脚本退出时,子进程将被孤立并继续运行。
当通过 systemd 启动时,如果父进程退出,子进程也会全部退出(好吧,screen它们在 die 中启动并显示为 Dead)。
理想情况下,我需要能够在不杀死所有子进程的情况下重新启动父脚本,我是否遗漏了什么?
谢谢!
[Unit]
Description=Server commander
After=network.target
[Service]
User=serveruser
Type=forking
PIDFile=/var/Server/Server.pid
ExecStart=/var/Server/Server.py
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
编辑:
我可能需要指出 Python 脚本本质上是其子进程的“控制器”。它screen根据中央服务器的请求启动和停止 GNU 中的服务器。它通常一直在运行,它不会产生服务并退出。
然而,在某些情况下,我希望能够在不杀死子进程的情况下重新加载脚本,即使这意味着进程被孤立到 pid 1。事实上,如果 Python 脚本从进程开始,则无关紧要父进程,如果可能的话。
更好地解释它是如何工作的:
systemd 产卵 Server.pyServer.py 派生并写入 pid 文件 systemdServer.py 然后根据其指令在 gnu 屏幕中生成服务器进程Server.py 继续运行以执行从服务器请求的任何重新启动在不使用 的情况下 启动时systemd,Server.py可以重新启动并且screens它启动的 GNU不受影响。当使用 启动时systemd,当Server.py关闭时,这些屏幕进程不会被孤立到 pid …
我使用 Ubuntu。在“侏儒末端”,I可以通过第一输入键入的Unicode码点Ctrl+ Shift+u其次是码点的十六进制值,例如C-S-u 2468产生?
konsole,我的首选终端,没有这个C-S-u(Gnome)功能......
在 Konsole 中是否有一些等效的 KDE 方法来执行此操作?
我正在systemd为 OSSEC HIDS编写单元文件。问题是,当systemd启动服务时,它会立即停止它们。
当我使用以下ExecStart指令时,一切正常。
ExecStart=/var/ossec/bin/ossec-control start
Run Code Online (Sandbox Code Playgroud)
但是当我进行以下小的改进时,我在 OSSEC 日志中发现它SIG 15在启动后收到。
ExecStart=/bin/sh -c '${DIRECTORY}/bin/ossec-control start'
Run Code Online (Sandbox Code Playgroud)
如果我再做一个小的更改,服务将SIG 15在 20 秒后收到。
ExecStart=/bin/sh -c '${DIRECTORY}/bin/ossec-control start && sleep 20'
Run Code Online (Sandbox Code Playgroud)
所以,我想,这会在服务启动后systemd杀死/bin/sh进程,/bin/sh然后杀死OSSEC.
我怎么解决这个问题?
我试图获取我在 Bash 循环的“条件”部分中重复调用的函数的退出代码while:
while <function>; do
<stuff>
done
Run Code Online (Sandbox Code Playgroud)
当此循环由于错误而终止时,我需要 的退出代码<function>。关于如何得到它有什么想法吗?
是否有任何命令可用于将输入或命令发送到给定的 tmux 会话/窗格而无需连接到它?
用于无人值守访问,
我有一个在 tmux 会话上运行的控制台应用程序。我想在部署(使用 capistrano)完成后重新启动它。
是否可以?
基本上我想发送:
exit
cd ..
cd app
rails console
Run Code Online (Sandbox Code Playgroud) 在文件管理器中,您通常可以选择一个文件,然后按住Shift并选择另一个文件。中间的每个文件都将被选择。
我想做bash/zsh相当于这个。
即:我想给出 2 个文件名,并在中间包含每个文件名(按字母顺序排列 - 输出它们的方式ls)。
我知道? {} *和其他通配符选项,但是我希望能够在名称高度混乱的文件上使用它。
例如:给定文件
$ ls
aoeitoae.txt
oaeistn.txt
oaie.txt
paeoai.txt
sotaoe.txt
Run Code Online (Sandbox Code Playgroud)
我想发出这样的命令rm aoeitoae.txt-oaie.txt,然后得到:
$ ls
paeoai.txt
sotaoe.txt
Run Code Online (Sandbox Code Playgroud)
我怎样才能实现这个目标?
众所周知,当运行时bash -c "COMMAND"(至少在 Linux 的常见版本中),当有一个没有任何元字符(除了space、tab或newline)的命令时,bash -c进程不会分叉,而是将自身替换为COMMAND直接用系统调用执行execve优化,所以结果只会是一个进程。
$ pid=$$; bash -c "pstree -p $pid"\nbash(5285)\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80pstree(14314)\nRun Code Online (Sandbox Code Playgroud)\n如果有任何元字符(例如重定向)或多个命令(无论如何都需要一个元字符),bash则会分叉它执行的每个命令。
$ pid=$$; bash -c ":; pstree -p $pid"\nbash(5285)\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80bash(28769)\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80pstree(28770)\n\n$ pid=$$; bash -c "pstree -p $pid 2>/dev/null"\nbash(5285)\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80bash(14403)\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80pstree(14404)\nRun Code Online (Sandbox Code Playgroud)\n这是一个未记录的优化功能(这意味着它无法得到保证),还是在某处记录并得到保证?
\n注意:我认为并非所有版本的bash行为都是如此,并且在某些版本上,它只是被视为实现细节而不是保证,但我想知道是否至少有一些bash版本明确支持这一点并且记录此情况的条件。;例如,如果命令后面有一个字符,没有任何第二个命令,bash仍然execve不会分叉。
$ pid=$$; bash -c "pstree -p $pid ; "\nbash(17516)\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80pstree(17658)\nRun Code Online (Sandbox Code Playgroud)\n正如我所提到的,这种行为对于经验丰富的用户来说是众所周知的 …
我确实尝试过sedand awk,但它不起作用,因为字符所涉及的字符/已经在命令中作为分隔符存在。
请让我知道我怎样才能做到这一点。
下面是一个示例示例。我们要删除评论部分,即/*.....*/
/*This is to print the output
data*/
proc print data=sashelp.cars;
run;
/*Creating dataset*/
data abc;
set xyz;
run;
Run Code Online (Sandbox Code Playgroud) 我在 Arch Linux 上运行 Firefox 52.0.2,虽然在系统上(例如:在 Nautilus 中)我有日语字符显示正常,但在 Firefox 中它们是不可读的,因为为它们显示的所有内容是这样的:
这是因为我没有安装允许显示为 Firefox 安装的平假名、片假名和汉字的字体。但问题是我不完全确定我是如何为 Firefox 获得这个的。我尝试在 Firefox 中安装日语词典,但这似乎没有任何区别。
那么我必须做什么和安装才能让它们正确显示?因为在这种形式下,阅读和编写它们显然非常困难。
最近几个月,我发现如果我在 Chrome 中复制 URL,然后在 中 Shift-Insert urxvt,粘贴的 URL 会被转义。
例如,原始网址是:
http://example.com/?a=c
Run Code Online (Sandbox Code Playgroud)
粘贴的内容是:
http://example.com/\?a\=c
Run Code Online (Sandbox Code Playgroud)
但是,如果我将其粘贴到其他地方,例如在 Web 浏览器中或在 中vim,则无法逃脱。
我用的是 Arch Linux, urxvt, zsh,oh-my-zsh.