teamspeak服务的启动自定义设置

teamspeak服务的启动自定义设置

设置服务自动启动脚本

systemd服务参考

sudo vim /lib/systemd/system/teamspeak.service
#这个 Systemd 服务单元文件中的代码可以实现 TeamSpeak 服务的自动启动是因为它定义了服务在系统引导过程中的行为,包括在什么时候启动以及如何启动。
#这个 Systemd 服务单元文件中的配置确保了在系统引导时,当满足特定的条件(网络和日志服务准备就绪)时,TeamSpeak 服务会自动启动。配置文件中定义了启动和停止服务的命令,并且指定了服务的依赖关系和工作环境,这些都是使服务能够在系统引导时自动启动的重要因素。

[Unit]
Description=Teamspeak, The most superior online voice communication solution.
Wants=network-online.target
After=syslog.target network.target network-online.target

[Service]
User=teamspeak
Group=teamspeak
WorkingDirectory=/home/teamspeak/teamspeak3-server_linux_amd64/
ExecStart=/home/teamspeak/teamspeak3-server_linux_amd64/ts3server_startscript.sh start
ExecStop=/home/teamspeak/teamspeak3-server_linux_amd64/ts3server_startscript.sh stop
PIDFile=/home/teamspeak/teamspeak3-server_linux_amd64/ts3server.pid
Type=forking

[Install]
WantedBy=multi-user.target

[Unit] 部分:

  • Description=:服务的简要描述。在这里描述为 “Teamspeak, The most superior online voice communication solution.”,是对服务的概括性描述。
  • Wants=:定义了服务单元依赖的其他单元。在这里,指定依赖 network-online.target,表示此服务需要在网络可用时启动。
  • After=:定义了服务单元应该在哪些单元之后启动。在这里,定义了在 syslog.targetnetwork.targetnetwork-online.target 之后启动。

在 Systemd 中,syslog.targetnetwork.targetnetwork-online.target 是特定的目标单元(Target Units),它们用于控制系统启动时的服务和目标。

  1. syslog.target:
  • syslog.target 是用于日志系统的目标单元。它表示系统启动后,日志服务需要准备就绪。当该目标单元被触发时,系统中的日志服务(如 rsyslogsyslog-ng 等)应该已经启动并准备好接收日志消息。
  1. network.target:
  • network.target 是用于网络的目标单元。当这个目标单元被触发时,表示系统的基本网络服务已经启动完成,并且网络连接已经可用。通常,一些基本的网络服务(如网络接口、DHCP 客户端等)会在此目标单元完成后启动。
  1. network-online.target:
  • network-online.target 是建立在 network.target 之上的目标单元。与 network.target 不同,network-online.target 表示系统的网络连接已经完全建立并处于可靠的在线状态。这个目标单元通常在 network.target 启动后的一段时间内被触发,表示网络连接已经稳定。

这些目标单元用于确定系统启动的阶段和确保在系统各个组件初始化完毕后再启动服务。在 Systemd 中,服务可以根据这些目标单元进行依赖和触发,以确保服务在所需的条件下启动。


[Service] 部分:

  • User=:指定了运行服务的用户。在这里,服务将以 teamspeak 用户的身份运行。
  • Group=:指定了服务运行的用户组。在这里,服务将以 teamspeak 用户组的身份运行。
  • WorkingDirectory=:指定了服务的工作目录。在这里,设置工作目录为 /home/teamspeak/teamspeak3-server_linux_amd64/
  • ExecStart=:指定了服务启动时执行的命令。在这里,指定了启动 TeamSpeak 服务器的脚本路径和命令。
  • ExecStop=:指定了服务停止时执行的命令。在这里,指定了停止 TeamSpeak 服务器的脚本路径和命令。
  • PIDFile=:指定了保存进程 ID 的文件路径。在这里,设置为 /home/teamspeak/teamspeak3-server_linux_amd64/ts3server.pid
  • Type=forking:指定了服务的类型。forking 类型适用于会创建子进程并在父进程退出后继续运行的服务。

[Install] 部分:

  • WantedBy=multi-user.target:指定了服务的安装信息。在这里,定义了当 multi-user.target 启动时需要启动此服务。

这是一个 Systemd 服务单元文件的示例,用于启动和管理 TeamSpeak 3 服务器。这个文件描述了服务的名称、运行方式、用户和组、启动和停止命令以及其他配置。

具体到你提供的 Systemd 服务单元文件中:

  • [Unit] 部分描述了服务的基本信息,如描述、依赖关系等。
  • Description 是对服务的简短描述。
  • Wants, After 确定了服务的依赖关系和启动顺序。
  • [Service] 部分定义了服务运行的方式和相关的命令。
    • UserGroup 指定了服务运行的用户和用户组。
    • WorkingDirectory 设置了服务运行的工作目录。
    • ExecStart 指定了服务启动时执行的命令。
    • ExecStop 指定了服务停止时执行的命令。
    • PIDFile 定义了存储进程 ID 的文件路径。
    • Type 定义了服务的类型。
  • [Install] 部分定义了服务的安装信息,包括它如何在系统启动时自动启用。

这个示例文件主要用于管理 TeamSpeak 3 服务器,指定了如何启动和停止该服务。要使用这个文件,你可以将其保存在 /etc/systemd/system/ 目录下(文件名通常以 .service 结尾),然后执行以下命令来启用并启动服务:

sudo systemctl daemon-reload  # 重新加载 Systemd 配置
sudo systemctl enable your-service-name.service  # 启用服务(使其在系统启动时自动启动)
sudo systemctl start your-service-name.service  # 启动服务
sudo systemctl status your-service-name.service  # 检查服务状态

请确保替换 your-service-name.service 为你所保存的服务文件的实际名称。

要停止服务,可以运行:

sudo systemctl stop your-service-name.service  # 停止服务

设置固定时段


你需要创建两个 Systemd 定时器单元文件和两个 Systemd 服务单元文件,一个用于启动 TeamSpeak 3 服务器,另一个用于停止。

首先是创建定时器单元文件:

1. 启动定时器文件 teamspeak-start.timer

创建一个名为 teamspeak-start.timer 的文件,内容如下所示:

teamspeak-start.timer 文件内容:

[Unit]
Description=Start TeamSpeak Server at 19:00

[Timer]
OnCalendar=*-*-* 19:00:00
Persistent=true

[Install]
WantedBy=timers.target

2. 停止定时器文件 teamspeak-stop.timer

创建一个名为 teamspeak-stop.timer 的文件,内容如下所示:

teamspeak-stop.timer 文件内容:

[Unit]
Description=Stop TeamSpeak Server at 23:59

[Timer]
OnCalendar=*-*-* 23:59:00
Persistent=true

[Install]
WantedBy=timers.target

接下来,是创建服务单元文件:

3. 启动服务文件 teamspeak-start.service

创建一个名为 teamspeak-start.service 的文件,内容如下所示:

teamspeak-start.service 文件内容:

[Unit]
Description=Start TeamSpeak Server Service
Wants=network-online.target
After=syslog.target network.target network-online.target

[Service]
User=teamspeak
Group=teamspeak
WorkingDirectory=/home/teamspeak/teamspeak3-server_linux_amd64/
ExecStart=/home/teamspeak/teamspeak3-server_linux_amd64/ts3server_startscript.sh start
PIDFile=/home/teamspeak/teamspeak3-server_linux_amd64/ts3server.pid
Type=forking

[Install]
WantedBy=multi-user.target

4. 停止服务文件 teamspeak-stop.service

创建一个名为 teamspeak-stop.service 的文件,内容如下所示:

teamspeak-stop.service 文件内容:

[Unit]
Description=Stop TeamSpeak Server Service

[Service]
User=teamspeak
Group=teamspeak
WorkingDirectory=/home/teamspeak/teamspeak3-server_linux_amd64/
ExecStop=/home/teamspeak/teamspeak3-server_linux_amd64/ts3server_startscript.sh stop
PIDFile=/home/teamspeak/teamspeak3-server_linux_amd64/ts3server.pid
Type=forking

[Install]
WantedBy=multi-user.target

将这些文件分别保存在 /etc/systemd/system/ 目录下,确保文件名以 .timer.service 结尾。

接下来,启用和启动这些定时器和服务:

sudo systemctl daemon-reload  # 重新加载 Systemd 配置
# 启用定时器	这个命令只是启用了定时器单元,但并没有开始执行定时器的操作。定时器的触发将遵循配置中指定的时间规则。
sudo systemctl enable teamspeak-start.timer
sudo systemctl enable teamspeak-stop.timer

# 启动定时器
sudo systemctl start teamspeak-start.timer
sudo systemctl start teamspeak-stop.timer
# 检查定时器状态
sudo systemctl status teamspeak-start.timer
sudo systemctl status teamspeak-stop.timer

● teamspeak-start.timer - Start TeamSpeak Server at 19:00
Loaded: loaded (/lib/systemd/system/teamspeak-start.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Fri 2023-11-17 14:43:52 CST; 12min ago
Trigger: Fri 2023-11-17 19:00:00 CST; 4h 3min left
Triggers: ● teamspeak-start.service

Nov 17 14:43:52 VM-4-14-ubuntu systemd[1]: Started teamspeak-start.timer.

  1. teamspeak-start.timer 的说明:
  • teamspeak-start.timer 是一个 Systemd 定时器单元,负责在特定时间启动名为 teamspeak-start.service 的服务。
  1. 当前状态和信息:
  • Loaded:定时器单元已加载并处于已加载状态。
  • Active:定时器单元处于活动状态,状态为 “waiting”,表示正在等待触发。
  • since:显示了定时器单元最后一次状态变化的时间,即活动状态开始的时间。
  • Trigger:下一个定时器触发的时间。在这个例子中,下一个触发时间是 Fri 2023-11-17 19:00:00 CST,还有 4 小时 3 分钟才会触发。
  • Triggers:指示了定时器将触发的服务。在这里,它显示了 teamspeak-start.service,这是定时器将要启动的服务。

根据输出信息显示,teamspeak-start.timer 定时器已启用,并且在预定时间(Fri 2023-11-17 19:00:00 CST)后将触发 teamspeak-start.service 服务。目前定时器处于等待状态,等待触发时间的到来。

这样设置后,TeamSpeak 3 服务器将在每天的指定时间启动和停止。请确保修改文件中的路径和时间以适应你的系统和需求。

TS的启动脚本

ts3server_startscript.sh

#!/bin/sh
# Copyright (c) 2019 TeamSpeak Systems GmbH
# All rights reserved

BINARYNAME=ts3server
COMMANDLINE_PARAMETERS="" #add any command line parameters you want to pass here
PID_FILE=ts3server.pid

do_start() {
	if [ -e $PID_FILE ]; then
		PID=$(cat "$PID_FILE")
		if (ps -p "$PID" >/dev/null 2>&1); then
			echo "The server is already running, try restart or stop"
			return 1
		else
			echo "$PID_FILE found, but no server running. Possibly your previously started server crashed"
			echo "Please view the logfile for details."
			rm $PID_FILE
		fi
	fi
	if [ $(id -u) -eq 0 ]; then
		echo "WARNING ! For security reasons we advise: DO NOT RUN THE SERVER AS ROOT"
		c=1
		while [ "$c" -le 10 ]; do
			echo -n "!"
			sleep 1
			c=$(($c + 1))
		done
		echo "!"
	fi
	echo "Starting the TeamSpeak 3 server"
	if [ ! -e "$BINARYNAME" ]; then
		echo "Could not find binary, aborting"
		return 5
	fi
	if [ ! -x "$BINARYNAME" ]; then
		echo "${BINARYNAME} is not executable, trying to set it"
		chmod u+x "${BINARYNAME}"
	fi
	if [ ! -x "$BINARYNAME" ]; then
		echo "${BINARNAME} is not exectuable, cannot start TeamSpeak 3 server"
		return 3
	fi
	"./${BINARYNAME}" "${@}" "daemon=1" "pid_file=$PID_FILE"
	if [ $? -eq 0 ]; then
		echo "TeamSpeak 3 server started, for details please view the log file"
	else
		echo "TeamSpeak 3 server could not start"
		return 4
	fi
}

do_stop() {
	if [ ! -e $PID_FILE ]; then
		echo "No server running ($PID_FILE is missing)"
		return 0
	fi
	PID=$(cat "$PID_FILE")
	if (! ps -p "$PID" >/dev/null 2>&1); then
		echo "No server running"
		return 0
	fi

	echo -n "Stopping the TeamSpeak 3 server "
	kill -TERM "$PID" || exit $?
	rm -f $PID_FILE
	c=300
	while [ "$c" -gt 0 ]; do
		if (kill -0 "$PID" 2>/dev/null); then
			echo -n "."
			sleep 1
		else
			break
		fi
		c=$(($c - 1))
	done
	echo
	if [ $c -eq 0 ]; then
		echo "Server is not shutting down cleanly - killing"
		kill -KILL "$PID"
		return $?
	else
		echo "done"
	fi
	return 0
}

do_status() {
	if [ ! -e $PID_FILE ]; then
		echo "No server running ($PID_FILE is missing)"
		return 1
	fi
	PID=$(cat "$PID_FILE")
	if (! ps -p "$PID" >/dev/null 2>&1); then
		echo "Server seems to have died"
		return 1
	fi
	echo "Server is running"
	return 0
}

# change directory to the scripts location
cd $(dirname $([ -x "$(command -v realpath)" ] && realpath "$0" || readlink -f "$0"))

case "$1" in
start)
	shift
	do_start "$@" "$COMMANDLINE_PARAMETERS"
	exit $?
	;;
stop)
	do_stop
	exit $?
	;;
restart)
	shift
	do_stop && (do_start "$@" "$COMMANDLINE_PARAMETERS")
	exit $?
	;;
status)
	do_status
	exit $?
	;;
*)
	echo "Usage: ${0} {start|stop|restart|status}"
	exit 2
	;;
esac

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值