如何才能做到这一点?我知道这很简单,包括在启动 init 脚本的实际命令中附加类似&或&>的内容。
但是,假设日志文件是 /var/log/customDaemon.log ,最好的方法是什么,如何确保 init 脚本自行分离?
这是我拥有的初始化脚本。我也不确定脚本中的方法是整洁的还是只是一个讨厌的黑客。
#!/bin/bash
#
# /etc/rc.d/init.d/customDaemon
#
# description: "The Daemon"
# processname: customDaemon
# pidfile: "/var/run/customDaemon.pid"
# Source function library.
. /etc/rc.d/init.d/functions
start() {
echo "Starting customDaemon"
/var/customDaemon &> /dev/null &
return 1
}
stop() {
echo "Stopping tweriod"
prockill customDaemon
return 2
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
reload)
restart
;;
status)
status customDaemon
;;
*)
echo "Usage: customDaemon …Run Code Online (Sandbox Code Playgroud) 我想每晚将服务器 A 的“热克隆”“热克隆”到服务器 B。建议服务器 B 在此操作期间运行最少的守护进程,因此我想创建一个“最小”运行级别,它几乎只运行 sshd 并切换到/从该运行级别中间脚本中的运行级别,即:
# do some stuff ...
# take services down
telinit 2
# do backup ...
# bring services back up
telinit 3
# do post-backup stuff ...
Run Code Online (Sandbox Code Playgroud)
我想做一个运行级别切换,而不是显式启动/停止服务,这样我就可以在许多不同配置的机器上使用相同的脚本(不同的服务,一些在 systemv-init 上,一些在 systemd 上)。我想将其全部保存在一个脚本中以实现可维护性,而不是创建一堆新的 initd/systemd 启动/停止脚本。
所以问题的本质是: * telinit 会停止脚本吗(假设 cron 在两个运行级别中)?* telinit 是等待完成还是立即返回?* 如果上述工作是“安全的”,或者该方法是否存在潜在问题?* 是否有更好的方法可以使用单个脚本(同样,我更愿意避免安装一堆新的 init 脚本,因此这个东西在很大程度上是“独立的”和可移植的)
我有一个最小的 linux 安装。问题是为了访问网络我必须发出
ifconfig eth0 up
dhclient
Run Code Online (Sandbox Code Playgroud)
每次重启后。这些命令在日常 linux 系统上的规范位置在哪里?或者更确切地说,我应该把它们放在哪里?
当(Debian Lenny)服务器启动时,我正在编写一个愚蠢的小脚本来向人们发送电子邮件。现在我已经使用 update-rc.d 将它设置为 init.d 脚本,但后来我意识到我可以使用 cron 作业来代替。对于这样的事情,使用 cron 作业还是 init.d 更好?
我还没有实际测试脚本是否在启动时运行,但它应该可以工作。还没有尝试重新启动,但潜在的问题是我们随机让服务器重新启动一次,然后又随机关闭/断电,所以我们想知道是电源故障还是其他原因。这至少会让我们知道服务器何时重新启动。
我租了一台专用服务器,运行 Debian stable。您在屏幕上看到的启动输出(如果有的话)是否存储在任何地方?如果没有,是否有一种非侵入性的方式在下次重新启动后使该数据可用?或者你如何确保系统干净地启动?
我继承了在 Solaris 上进入单用户模式的指令,例如:
reboot -- -s我的问题是,为什么不这样做:
init 1有什么不同?
我的系统上有一些僵尸进程。我已经杀死了那些僵尸的父级,希望 init 会接管并释放资源(CLOSE_WAIT 中有很多套接字)。但是 init 并没有从系统中删除这些进程:
#ps ax
...
17051 ? Zl 8498:24 [impalad] <defunct>
...
# ps -o ppid= -p 17051
1
Run Code Online (Sandbox Code Playgroud)
有没有办法不用重启就清除僵尸?
更新:
我试过了kill -s SIGCHLD 1。它没有帮助。
我创建了一个名为 blueBoxT 的脚本来启动和停止 Oracle,并将其放置在 /etc/init.d 目录中。
#!/bin/bash
echo "blueBoxT $1 - `date '+%Y%m%d%H%M'`" >> /root/blueBoxT.log
case "$1" in
'start')
echo "Starting Oracle"
su - oracle -c "/home/oracle/startDBT"
;;
'stop')
echo "Stopping Oracle"
su - oracle -c "/home/oracle/stopDBT"
;;
*)
echo "`basename $0`: usage: `basename $0` { stop | start }"
;;
esac
exit 0
Run Code Online (Sandbox Code Playgroud)
我做了符号链接...
root@dev /etc/rc.d
# find . -name *blueBox*
./rc2.d/K11blueBox
./rc6.d/K11blueBox
./init.d/blueBoxT
./rc1.d/K11blueBox
./rc3.d/S97blueBox
./rc0.d/K11blueBox
./rc5.d/S97blueBox
./rc4.d/S97blueBox
Run Code Online (Sandbox Code Playgroud)
/root/blueBoxT.log 中的日志显示了启动命令并且 Oracle 实例已启动。
停止命令似乎永远不会被调用。它不在我的日志中。
root@dev /root
# cat blueBoxT.log …Run Code Online (Sandbox Code Playgroud) 如何从 bash shell 监视服务端口?
我想监视 Java 服务(在端口 9090 上每分钟一次),然后如果该服务没有响应简单的 HTML 消息,则调用“/etc/init.d/myservice -restart”。
你会怎么做这样的事情?
我的想法是使用类似的东西:
wget -O - --no-check-certificate --progress=dot https://localhost:9090
Run Code Online (Sandbox Code Playgroud)
或者
curl --insecure https://localhost:9090
Run Code Online (Sandbox Code Playgroud) 我可以grep在init脚本中检查给定字符串的文件内容吗?
我担心在涉及init脚本时引入依赖项和一般约定,以及运行grep或其他工具是否违反了某些信条。