我正在发布的 .deb 包期望它可以调用 lsb_release。一位使用 Debian 6.0.5 的客户表示 lsb_release 命令(甚至在终端中)会产生命令未找到错误。这是标准还是他的 Debian 构建有问题?
当我lsb_release在 Debian 8 上运行时,出现以下错误:
No LSB modules are available.
Run Code Online (Sandbox Code Playgroud)
是否有任何丢失的文件导致此问题?
在 Debian 7 (Wheezy) 中 nginx 的初始化脚本中,我阅读了以下摘录:
status)
status_of_proc -p /var/run/$NAME.pid "$DAEMON" nginx && exit 0 || exit $?
;;
Run Code Online (Sandbox Code Playgroud)
此代码运行良好并sudo service nginx status输出[ ok ] nginx is running. 然而status_of_proc没有在 bash 中定义,也没有在 dash 中定义:
$ type status_of_proc
status_of_proc: not found
Run Code Online (Sandbox Code Playgroud)
虽然如果我将相同的检查插入到 nginx 脚本中,我会得到以下结果:
status_of_proc is a shell function
Run Code Online (Sandbox Code Playgroud)
在 init 文件本身上运行 bash 提供了进一步的解释:
status_of_proc is a function
status_of_proc ()
{
local pidfile daemon name status OPTIND;
pidfile=;
OPTIND=1;
while getopts p: opt; do
case …Run Code Online (Sandbox Code Playgroud) 例如 bin、sbin、proc、lib、boot、usr 等...
某处是否有标准列表,是否取决于发行版?
这基本上是为了回答我的常见问题“我正在服务器上安装 X 或放置 Y,我应该将它放在哪个文件夹中?”
我正在编写一个 lsb init 脚本(不可否认,我从未从头开始做过)它启动了一个守护进程的 php 脚本。php 脚本是这样开始的:
#!/usr/bin/env php
<?php
/* do some stuff */
Run Code Online (Sandbox Code Playgroud)
然后在 init 脚本中像这样启动:
# first line is args to start-stop-daemon, second line is args to php-script
start-stop-daemon --start --exec /path/to/executable/php-script.php \
-- --daemon --pid-file=$PIDFILE --other-php-script-args
Run Code Online (Sandbox Code Playgroud)
该--daemon标志导致 php 脚本分离并作为守护程序本身运行,而不是依赖于start-stop-daemon分离它。
这就是它(试图)在 init 脚本中停止它的方式:
start-stop-daemon --stop --oknodo --exec /path/to/executable/php-script.php \
--pidfile $PIDFILE
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试通过 init 脚本停止时,它给了我这个:
$ sudo /etc/init.d/my-lsb-init-script stop
* Stopping My Project
No /path/to/executable/php-script.php found running; none killed.
...done.
Run Code Online (Sandbox Code Playgroud)
快速浏览一下ps告诉我,尽管 php …
我想检测 linux 发行版和版本。
我用我最喜欢的搜索引擎搜索并发现了lsb_release.
不幸的是,默认情况下未安装此工具。
我想避免先安装lsb_release。
有没有更简单的方法来以可移植的方式检测 linux 发行版和版本?
“便携式”是指不同类型的 linux 发行版。不是 *BSD 或 Windows。
我想编写一个 init 服务脚本,它以特定用户(而不是 root)身份运行程序。然后我将 chkconfig 这个脚本并安装到我的生产运行级别。
我可以在脚本中放置一个 su 命令,但我想知道是否有这样做的最佳实践。
谢谢,加里
我需要开发一个/etc/init.d脚本来启动和停止 Debian 10 Buster 中的服务器(二进制可执行文件)。而在 Debian 的早期版本中,您将编写一个完整的 shell 脚本来发出对 的调用'start-stop-daemon',而在最近的版本中,这些机制似乎已经被抽象掉了。手册页'init-d-script'提供了一个简单的脚本,该脚本将根据设置单个变量来启动和停止服务器'DAEMON'。
但是,我需要在服务器启动后通过将锁定文件写入磁盘来进行自定义,更改当前工作目录并将自定义参数传递给服务器。
手册页指的是开发覆盖函数,例如'do_start_override'和'do_stop_override'可能会被调用而不是默认函数。我应该如何编写覆盖函数?我应该'do_start_cmd()'从中复制和粘贴函数'/lib/init/init-d-script'并修改它吗?或者我应该调用'start_daemon()'中定义的函数'/lib/lsb/init-functions'?