ark_systemd
This commit is contained in:
parent
ff2d2f1668
commit
9c38ed40e8
133
hlna.py
133
hlna.py
@ -15,17 +15,14 @@ dir_unit = f"{home_dir}/.config/systemd/user/"
|
|||||||
dir_server = f"{home_dir}/Servers/"
|
dir_server = f"{home_dir}/Servers/"
|
||||||
dir_logs = f"{dir_config}logs/"
|
dir_logs = f"{dir_config}logs/"
|
||||||
|
|
||||||
dir_server_ark = f"{dir_server}/ARK/"
|
dir_server_ark = f"{dir_server}ARK/"
|
||||||
dir_server_ark = f"{dir_server_ark}ShooterGame/Binaries/Linux/"
|
dir_server_exec = f"{dir_server_ark}ShooterGame/Binaries/Linux/"
|
||||||
|
|
||||||
|
dir_maps_ark = f"{dir_config}/ARK/"
|
||||||
dir_maps_ark = f"{dir_config}/ARK"
|
|
||||||
dir_deactivated = f"{dir_maps_ark}deactivated/"
|
dir_deactivated = f"{dir_maps_ark}deactivated/"
|
||||||
|
|
||||||
dir_server_7days = f"{dir_server}/7Days/"
|
dir_server_7days = f"{dir_server}/7Days/"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mods_id = ""
|
mods_id = ""
|
||||||
now = datetime.datetime.now()
|
now = datetime.datetime.now()
|
||||||
date = now.strftime("%Y-%m-%d")
|
date = now.strftime("%Y-%m-%d")
|
||||||
@ -49,8 +46,6 @@ create_dir(dir_config)
|
|||||||
create_dir(dir_logs)
|
create_dir(dir_logs)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def find_file(path):
|
def find_file(path):
|
||||||
"""Находим все конфиги в зависимости от пути"""
|
"""Находим все конфиги в зависимости от пути"""
|
||||||
arr = next(os.walk(path), (None, None, []))[2] # [] if no file
|
arr = next(os.walk(path), (None, None, []))[2] # [] if no file
|
||||||
@ -123,8 +118,8 @@ def config_ark(list_config=list_config):
|
|||||||
if count_cluster == 1:
|
if count_cluster == 1:
|
||||||
cluster_server = True
|
cluster_server = True
|
||||||
cluster_id = input("Укажите id для кластера, любое сочетание символов: \n")
|
cluster_id = input("Укажите id для кластера, любое сочетание символов: \n")
|
||||||
create_dir(dir_server + cluster_id)
|
create_dir(dir_server_ark + cluster_id)
|
||||||
cluster_dir_override = (dir_server + cluster_id)
|
cluster_dir_override = (dir_server_ark + cluster_id)
|
||||||
else:
|
else:
|
||||||
cluster_server = False
|
cluster_server = False
|
||||||
|
|
||||||
@ -243,7 +238,6 @@ def config_ark(list_config=list_config):
|
|||||||
query_port = 27015
|
query_port = 27015
|
||||||
print("Query Port=", query_port)
|
print("Query Port=", query_port)
|
||||||
|
|
||||||
|
|
||||||
rcon_enabled = True
|
rcon_enabled = True
|
||||||
if rcon_p == []:
|
if rcon_p == []:
|
||||||
rcon_port = 27020
|
rcon_port = 27020
|
||||||
@ -258,9 +252,9 @@ def config_ark(list_config=list_config):
|
|||||||
|
|
||||||
print("Передавать сервер в глобальный список серверов steam?")
|
print("Передавать сервер в глобальный список серверов steam?")
|
||||||
listen_server_amount = check_int("""\n
|
listen_server_amount = check_int("""\n
|
||||||
1. Да
|
1. Да
|
||||||
2. Нет
|
2. Нет
|
||||||
:""")
|
:""")
|
||||||
if listen_server_amount == 1:
|
if listen_server_amount == 1:
|
||||||
listen_server = True
|
listen_server = True
|
||||||
elif listen_server_amount == 2:
|
elif listen_server_amount == 2:
|
||||||
@ -268,7 +262,8 @@ def config_ark(list_config=list_config):
|
|||||||
else:
|
else:
|
||||||
listen_server = True
|
listen_server = True
|
||||||
|
|
||||||
yaml_create(game:="ARK", cluster_server, map_s, list_config[-1], port_server, query_port, rcon_enabled, rcon_port,
|
yaml_create(game := "ARK", cluster_server, map_s, list_config[-1], port_server, query_port, rcon_enabled,
|
||||||
|
rcon_port,
|
||||||
adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override, listen_server)
|
adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override, listen_server)
|
||||||
|
|
||||||
|
|
||||||
@ -285,12 +280,13 @@ def config_7daystodie():
|
|||||||
print_line("Запрещённые символы")
|
print_line("Запрещённые символы")
|
||||||
else:
|
else:
|
||||||
xml_parser()
|
xml_parser()
|
||||||
systemd_unit_create(game:="7Days", config_7days)
|
systemd_unit_create(game := "7Days", config_7days)
|
||||||
|
|
||||||
|
|
||||||
def xml_parser():
|
def xml_parser():
|
||||||
print("Я не умею парсить))")
|
print("Я не умею парсить))")
|
||||||
|
|
||||||
|
|
||||||
def yaml_create(game, cluster_server, map_s, name_server, port_server, query_port, rcon_enabled, rcon_port,
|
def yaml_create(game, cluster_server, map_s, name_server, port_server, query_port, rcon_enabled, rcon_port,
|
||||||
adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override, listen_server):
|
adminpassword_server, password_server, max_players, cluster_id, cluster_dir_override, listen_server):
|
||||||
settings_hlna = [
|
settings_hlna = [
|
||||||
@ -307,7 +303,7 @@ def yaml_create(game, cluster_server, map_s, name_server, port_server, query_por
|
|||||||
'MaxPlayers': max_players,
|
'MaxPlayers': max_players,
|
||||||
'ModsId': mods_id,
|
'ModsId': mods_id,
|
||||||
'Listen': listen_server,
|
'Listen': listen_server,
|
||||||
'ServerPath': dir_server,
|
'ServerPath': dir_server_ark,
|
||||||
'clusterid': cluster_id,
|
'clusterid': cluster_id,
|
||||||
'clusterdir': cluster_dir_override
|
'clusterdir': cluster_dir_override
|
||||||
}
|
}
|
||||||
@ -324,13 +320,15 @@ def systemd_unit_create(game, config_7days="", name_server=list_config):
|
|||||||
for i in name_server:
|
for i in name_server:
|
||||||
data = read_yaml(i)
|
data = read_yaml(i)
|
||||||
ntff = "" if not data['Cluster'] else "-NoTransferFromFiltering"
|
ntff = "" if not data['Cluster'] else "-NoTransferFromFiltering"
|
||||||
systemd_unit_exec = f"{dir_server_ark}ShooterGameServer {data['map']}?listen={data['Listen']}?SessionName={data['SessionName']}?Port={data['Port']}?QueryPort={data['QueryPort']}?RCONEnabled={data['RCONEnabled']}?RCONPort={data['RCONPort']}?ServerAdminPassword={data['ServerAdminPassword']}?MaxPlayers={data['MaxPlayers']} -clusterid={data['clusterid']} -ClusterDirOverride={data['clusterdir']} {ntff}"
|
unit_dir_server = dir_server_ark
|
||||||
unit_file = f"{dir_unit}ARK_{data['SessionName']}.service"
|
systemd_unit_exec = f"{dir_server_exec}ShooterGameServer {data['map']}?listen={data['Listen']}?SessionName={data['SessionName']}?Port={data['Port']}?QueryPort={data['QueryPort']}?RCONEnabled={data['RCONEnabled']}?RCONPort={data['RCONPort']}?ServerAdminPassword={data['ServerAdminPassword']}?MaxPlayers={data['MaxPlayers']} -clusterid={data['clusterid']} -ClusterDirOverride={data['clusterdir']} {ntff}"
|
||||||
|
unit_file = f"{dir_unit}ark_{data['SessionName']}.service".lower()
|
||||||
elif game == "7Days":
|
elif game == "7Days":
|
||||||
id_game = "294420"
|
id_game = "294420"
|
||||||
#сюда дописать обращение к xml для получения уникального имени сервера
|
# сюда дописать обращение к xml для получения уникального имени сервера
|
||||||
|
unit_dir_server = dir_server_7days
|
||||||
systemd_unit_exec = f"{dir_server_7days}startserver.sh -configfile={config_7days}.xml"
|
systemd_unit_exec = f"{dir_server_7days}startserver.sh -configfile={config_7days}.xml"
|
||||||
unit_file = f"{dir_unit}7Days.service"
|
unit_file = f"{dir_config}7days.service".lower()
|
||||||
|
|
||||||
unit_text = f'''[Unit]
|
unit_text = f'''[Unit]
|
||||||
Description={game}: Server
|
Description={game}: Server
|
||||||
@ -338,7 +336,7 @@ Wants=network-online.target
|
|||||||
After=syslog.target network.target nss-lookup.target network-online.target
|
After=syslog.target network.target nss-lookup.target network-online.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
ExecStartPre=/usr/bin/steamcmd +force_install_dir {dir_server} +login anonymous +app_update {id_game} +quit
|
ExecStartPre=/usr/bin/steamcmd +force_install_dir {unit_dir_server} +login anonymous +app_update {id_game} +quit
|
||||||
TimeoutStartSec=99999
|
TimeoutStartSec=99999
|
||||||
ExecStart={systemd_unit_exec}
|
ExecStart={systemd_unit_exec}
|
||||||
LimitNOFILE=100000
|
LimitNOFILE=100000
|
||||||
@ -350,23 +348,24 @@ WantedBy=default.target
|
|||||||
'''
|
'''
|
||||||
with open(unit_file, 'w') as systemd_unit:
|
with open(unit_file, 'w') as systemd_unit:
|
||||||
systemd_unit.write(unit_text)
|
systemd_unit.write(unit_text)
|
||||||
os.system(f"systemctl --user unmask {unit_file}")
|
unit_name = unit_file.split("/")[-1]
|
||||||
os.system(f"systemctl --user enable {unit_file}")
|
os.system(f"systemctl --user unmask {unit_name}")
|
||||||
os.system('systemctl --user daemon-reload')
|
os.system('systemctl --user daemon-reload')
|
||||||
|
os.system(f"systemctl --user enable {unit_name}")
|
||||||
|
|
||||||
|
|
||||||
def test_mod_install():
|
# def test_mod_install():
|
||||||
pathTest = f"{dir_server}ShooterGame/Saved/Config/LinuxServer/"
|
# pathTest = f"{dir_server_ark}ShooterGame/Saved/Config/LinuxServer/"
|
||||||
if os.path.exists(pathTest):
|
# if os.path.exists(pathTest):
|
||||||
os.chdir(pathTest)
|
# os.chdir(pathTest)
|
||||||
# "Добавить файл в Game.ini, если модов несколько добавляем еще строку ModIDS=<ModId> [ModInstaller] ModIDS=<ModID>"
|
# # "Добавить файл в Game.ini, если модов несколько добавляем еще строку ModIDS=<ModId> [ModInstaller] ModIDS=<ModID>"
|
||||||
# c этим не разобрался
|
# # c этим не разобрался
|
||||||
os.system("echo ActiveMods=2943454417 >> GameUserSettings.ini")
|
# os.system("echo ActiveMods=2943454417 >> GameUserSettings.ini")
|
||||||
else:
|
# else:
|
||||||
print_line("Сервер не установлен")
|
# print_line("Сервер не установлен")
|
||||||
|
#
|
||||||
|
#
|
||||||
test_mod_install()
|
# test_mod_install()
|
||||||
|
|
||||||
|
|
||||||
@hlna.command()
|
@hlna.command()
|
||||||
@ -396,7 +395,8 @@ def enablemap(m, e):
|
|||||||
if data['QueryPort'] in query_p:
|
if data['QueryPort'] in query_p:
|
||||||
print("Заменить query port?")
|
print("Заменить query port?")
|
||||||
continue
|
continue
|
||||||
x = os.system(f"mv {dir_deactivated}{i} {dir_maps_ark} >> {dir_logs}{date} 2>&1") # Добавить текущее время
|
x = os.system(
|
||||||
|
f"mv {dir_deactivated}{i} {dir_maps_ark} >> {dir_logs}{date} 2>&1") # Добавить текущее время
|
||||||
with open(f"{dir_logs}{date}.log", "a") as f:
|
with open(f"{dir_logs}{date}.log", "a") as f:
|
||||||
f.write(f"[{time}] File {i} has been moved to {dir_maps_ark}\n")
|
f.write(f"[{time}] File {i} has been moved to {dir_maps_ark}\n")
|
||||||
if x == 0:
|
if x == 0:
|
||||||
@ -407,7 +407,7 @@ def enablemap(m, e):
|
|||||||
pass
|
pass
|
||||||
# except:
|
# except:
|
||||||
# print("ошибка при активации карты")
|
# print("ошибка при активации карты")
|
||||||
# pass
|
# pass
|
||||||
else:
|
else:
|
||||||
for i in m:
|
for i in m:
|
||||||
try:
|
try:
|
||||||
@ -430,7 +430,7 @@ def enablemap(m, e):
|
|||||||
def servers(map_server=list_config):
|
def servers(map_server=list_config):
|
||||||
# Добавить сортивку по кластерам и вывод несколько столбиков
|
# Добавить сортивку по кластерам и вывод несколько столбиков
|
||||||
if map_server == [] and delist_config == []:
|
if map_server == [] and delist_config == []:
|
||||||
print("Сервера не установлены")
|
print("Сервера не сконфигурированы")
|
||||||
else:
|
else:
|
||||||
for i in map_server:
|
for i in map_server:
|
||||||
data = read_yaml(i)
|
data = read_yaml(i)
|
||||||
@ -474,10 +474,47 @@ def servers(map_server=list_config):
|
|||||||
|
|
||||||
|
|
||||||
@hlna.command(help='Для запуска, сконфигурированного сервера или кластера')
|
@hlna.command(help='Для запуска, сконфигурированного сервера или кластера')
|
||||||
|
@click.option('-g', help="Название игры для запуска. (ark, 7days")
|
||||||
@click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт")
|
@click.option('-m', default='all', help="Название карты для запуска или all для запуска все карт")
|
||||||
@click.option('-b', default='', help="")
|
@click.option('-b', default='', help="")
|
||||||
def start(m, b, name_server=list_config):
|
def start(g, m, b, name_server=list_config):
|
||||||
dict_mapname = {}
|
if g == "ark":
|
||||||
|
dict_mapname = {}
|
||||||
|
dict_allmapname = []
|
||||||
|
for i in name_server:
|
||||||
|
data = read_yaml(i)
|
||||||
|
print_line(f"Название сервера: {i} | Карта: {data['map']} | Кластер: {data['clusterid']}")
|
||||||
|
dict_mapname[data['SessionName']] = data['map']
|
||||||
|
dict_allmapname.append(data['SessionName'])
|
||||||
|
print_line(f"Словарь названия сервера и карты {dict_mapname}")
|
||||||
|
names_serverstart = []
|
||||||
|
for ns, v in dict_mapname.items():
|
||||||
|
print_line(f"переменные v и m {v} & {m}")
|
||||||
|
if v in m:
|
||||||
|
names_serverstart.append(ns)
|
||||||
|
print_line(f"Карта которая запускается {ns}")
|
||||||
|
if name_server != []:
|
||||||
|
if b == '':
|
||||||
|
if m == "all":
|
||||||
|
names_serverstart = dict_allmapname
|
||||||
|
print(f"Запускаем все активные карты {names_serverstart}")
|
||||||
|
else:
|
||||||
|
names_serverstart = choose_map(names_serverstart)
|
||||||
|
|
||||||
|
for i in names_serverstart:
|
||||||
|
data = read_yaml(i)
|
||||||
|
x = os.system(f"systemctl --user start ark_{data['SessionName'].lower()}.service")
|
||||||
|
print_line(x)
|
||||||
|
else:
|
||||||
|
print("Ни одной карты не установлено")
|
||||||
|
|
||||||
|
@hlna.command(help='Для остановки серверов')
|
||||||
|
@click.option('-g', help="Название игры для остановки. (ark, 7days")
|
||||||
|
@click.option('-m', default='all', help="Название карты для остановки или all для запуска все карт")
|
||||||
|
@click.option('-b', default='', help="")
|
||||||
|
def stop(g, m, b, name_server=list_config)
|
||||||
|
if g == "ark":
|
||||||
|
dict_mapname = {}
|
||||||
dict_allmapname = []
|
dict_allmapname = []
|
||||||
for i in name_server:
|
for i in name_server:
|
||||||
data = read_yaml(i)
|
data = read_yaml(i)
|
||||||
@ -496,19 +533,21 @@ def start(m, b, name_server=list_config):
|
|||||||
if m == "all":
|
if m == "all":
|
||||||
names_serverstart = dict_allmapname
|
names_serverstart = dict_allmapname
|
||||||
print(f"Запускаем все активные карты {names_serverstart}")
|
print(f"Запускаем все активные карты {names_serverstart}")
|
||||||
else:
|
else:
|
||||||
names_serverstart = choose_map(names_serverstart)
|
names_serverstart = choose_map(names_serverstart)
|
||||||
|
|
||||||
for i in names_serverstart:
|
for i in names_serverstart:
|
||||||
data = read_yaml(i)
|
data = read_yaml(i)
|
||||||
os.system(f"systemctl --user start ARK_{data['SessionName']}.service")
|
rcon(m, "SaveWorld")
|
||||||
else:
|
x = os.system(f"systemctl --user stop ark_{data['SessionName'].lower()}.service")
|
||||||
print("Ни одной карты не установлено")
|
print_line(x)
|
||||||
|
else:
|
||||||
|
print("Ни одной карты не установлено")
|
||||||
|
|
||||||
|
|
||||||
def read_yaml(list_config, flag=True):
|
def read_yaml(list_config, flag=True):
|
||||||
# Читаем конфиги активных или неактивных карт в зависимости от флага
|
# Читаем конфиги активных или неактивных карт в зависимости от флага
|
||||||
dirs = f"{dir_maps_ark}{list_config}" if flag else f"{dir_deactivated}{list_config}"
|
dirs = f"{dir_maps_ark}{list_config}" if flag else f"{dir_deactivated}{list_config}"
|
||||||
with open(dirs, "r") as yamlfile:
|
with open(dirs, "r") as yamlfile:
|
||||||
data = yaml.load(yamlfile, Loader=yaml.FullLoader)
|
data = yaml.load(yamlfile, Loader=yaml.FullLoader)
|
||||||
return data[0] # возвращаем словарь со всеми значениями
|
return data[0] # возвращаем словарь со всеми значениями
|
||||||
|
Loading…
Reference in New Issue
Block a user