我正在使用 CentOS 7,我的目标是每五秒创建一个 cron,但根据我的研究,我们只能使用 cron 一分钟,所以我现在要做的是创建一个 shell 文件。
命中
while sleep 5; do curl http://localhost/test.php; done
但我是通过右键单击手动点击它的。
我想要的是为该文件创建一个服务,以便我可以自动启动和停止它。
我找到了创建服务的脚本
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....
# Source function library.
. /etc/init.d/functions
start() {
# code to start app comes here
# example: daemon program_name &
}
stop() {
# code to stop app comes here
# example: killproc program_name
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
# code to check status of app comes here
# example: status program_name
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0
但我不知道在 start 或 stop 方法中写什么,我尝试将 hit.sh 的相同内容放入其中,但在 stop 方法中start(){}
给出了错误。}
答案1
尝试在现代系统上将脚本作为守护进程运行的用户应该使用systemd
:
[Unit]
Description=hit service
After=network-online.target
[Service]
ExecStart=/path/to/hit.sh
[Install]
WantedBy=multi-user.target
将其另存为/etc/systemd/system/hit.service
,然后您将能够使用 等来启动/停止/启用/禁用它systemctl start hit
。
2015 年的旧答案:
如果您想重用您的代码示例,它可能类似于:
#!/bin/bash
case "$1" in
start)
/path/to/hit.sh &
echo $!>/var/run/hit.pid
;;
stop)
kill `cat /var/run/hit.pid`
rm /var/run/hit.pid
;;
restart)
$0 stop
$0 start
;;
status)
if [ -e /var/run/hit.pid ]; then
echo hit.sh is running, pid=`cat /var/run/hit.pid`
else
echo hit.sh is NOT running
exit 1
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0
当然,您想要作为服务执行的脚本应该转到eg /usr/local/bin/hit.sh
,上面的代码应该转到/etc/init.d/hitservice
。
对于需要运行此服务的每个运行级别,您将需要创建相应的符号链接。例如,名为的符号链接/etc/init.d/rc5.d/S99hitservice
将启动运行级别 5 的服务。当然,您仍然可以通过service hitservice start
/手动启动和停止它service hitservice stop
答案2
我相信 CentOS 7 及以上版本使用 systemd。如果您的系统属于这种情况,请尝试以下操作:
将您要运行的脚本命令放入
/usr/bin/myscript
.请记住使脚本可执行
chmod +x
。创建以下文件:
/etc/systemd/system/my.service
[Unit]
Description=My Script
[Service]
Type=forking
ExecStart=/usr/bin/myscript
[Install]
WantedBy=multi-user.target
重新加载所有 systemd 服务文件:
systemctl daemon-reload
通过使用 启动服务来检查它是否正常工作
systemctl start my
。
奖金:
为了测试 systemd 服务,可以启动一个带有两个窗格的 tmux 环境,其中顶部窗口监视脚本的输出(stdout
和stderr
),底部窗口可用于重新启动服务。这需要tmux
安装,然后只需:
tmux new-session \; select-layout even-horizontal \; split-window -v journalctl -o cat --since=@$(date +%s) -f -u my \; rotate-window \; set -g status-bg colour0 \; set -g status-fg colour9 \; attach
然后使用以下命令重新启动服务:
systemctl restart my
tmux
使用退出ctrl-d
,然后使用ctrl-c
。
一旦您对脚本和服务文件感到满意,请进行更改
Type=forking
进入
Type=simple
完毕。
答案3
这是我的脚本即服务:
[Unit]
Description=To change In test buffer
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/test.sh
TimeoutStartSec=0
[Install]
WantedBy=default.target
答案4
下面的代码块对于将linux脚本转换为服务非常有帮助
- 使用 root 访问权限登录服务器
- 创建以下内容系统所需服务的单元文件并更改权限如下
touch /lib/systemd/system/test.service
chmod 664 /lib/systemd/system/test.service
- 将以下内容添加到系统定义服务的单元文件
[Unit]
Description=Test Service
After=network.target
[Service]
Type=forking
User=#username
PIDFile=#test.pid_path
ExecStart=#startup_script_path
ExecStop=#shutdown_script_path
[Install]
WantedBy=multi-user.target
- 将其作为服务启用
systemctl daemon-reload
systemctl enable test.service
- 使用以下命令启动、停止、状态和重新启动
systemctl start test.service
systemctl stop test.service
systemctl status test.service
systemctl restart test.service