From 8fa58a4841f87f157e4fd66a0ce9105519db22c1 Mon Sep 17 00:00:00 2001 From: JustArchi Date: Sat, 7 Oct 2017 17:26:08 +0200 Subject: [PATCH] Docker enhancements --- ArchiSteamFarm/ASF.cs | 2 +- ArchiSteamFarm/Events.cs | 2 +- ArchiSteamFarm/Program.cs | 4 ++++ .../scripts/generic/ArchiSteamFarm-Service.sh | 8 ++++++++ Dockerfile | 2 +- Dockerfile.Service | 12 ++++++++++++ 6 files changed, 27 insertions(+), 3 deletions(-) create mode 100755 ArchiSteamFarm/scripts/generic/ArchiSteamFarm-Service.sh create mode 100644 Dockerfile.Service diff --git a/ArchiSteamFarm/ASF.cs b/ArchiSteamFarm/ASF.cs index 01079c67f..2bb1bce9a 100644 --- a/ArchiSteamFarm/ASF.cs +++ b/ArchiSteamFarm/ASF.cs @@ -534,7 +534,7 @@ namespace ArchiSteamFarm { } private static async Task RestartOrExit() { - if (Program.GlobalConfig.AutoRestart) { + if (!Program.ServiceMode && Program.GlobalConfig.AutoRestart) { ArchiLogger.LogGenericInfo(Strings.Restarting); await Task.Delay(5000).ConfigureAwait(false); await Program.Restart().ConfigureAwait(false); diff --git a/ArchiSteamFarm/Events.cs b/ArchiSteamFarm/Events.cs index 014f0dd51..8e8f46884 100644 --- a/ArchiSteamFarm/Events.cs +++ b/ArchiSteamFarm/Events.cs @@ -29,7 +29,7 @@ using ArchiSteamFarm.Localization; namespace ArchiSteamFarm { internal static class Events { internal static async void OnBotShutdown() { - if (IPC.KeepRunning || Bot.Bots.Values.Any(bot => bot.KeepRunning)) { + if (Program.ServiceMode || IPC.KeepRunning || Bot.Bots.Values.Any(bot => bot.KeepRunning)) { return; } diff --git a/ArchiSteamFarm/Program.cs b/ArchiSteamFarm/Program.cs index cc96af525..41ed42acd 100644 --- a/ArchiSteamFarm/Program.cs +++ b/ArchiSteamFarm/Program.cs @@ -48,6 +48,7 @@ namespace ArchiSteamFarm { internal static GlobalConfig GlobalConfig { get; private set; } internal static GlobalDatabase GlobalDatabase { get; private set; } + internal static bool ServiceMode { get; private set; } internal static WebBrowser WebBrowser { get; private set; } private static readonly object ConsoleLock = new object(); @@ -396,6 +397,9 @@ namespace ArchiSteamFarm { case "--server": IPC.Start(); break; + case "--service": + ServiceMode = true; + break; default: if (arg.StartsWith("--", StringComparison.Ordinal)) { if (arg.StartsWith("--cryptkey=", StringComparison.Ordinal) && (arg.Length > 11)) { diff --git a/ArchiSteamFarm/scripts/generic/ArchiSteamFarm-Service.sh b/ArchiSteamFarm/scripts/generic/ArchiSteamFarm-Service.sh new file mode 100755 index 000000000..3ccaa614b --- /dev/null +++ b/ArchiSteamFarm/scripts/generic/ArchiSteamFarm-Service.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -eu +cd "$(dirname "$(readlink -f "$0")")" + +while [[ -f ArchiSteamFarm.dll ]]; do + dotnet ArchiSteamFarm.dll --service # We will abort the script if ASF exits with an error + sleep 1 +done diff --git a/Dockerfile b/Dockerfile index 04da4dcc8..5ac9052ff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ WORKDIR /app COPY . ./ RUN dotnet publish ArchiSteamFarm -c Release -o out /nologo -FROM microsoft/dotnet:2.0-runtime +FROM microsoft/dotnet:2.0-runtime WORKDIR /app COPY --from=build-env /app/ArchiSteamFarm/out ./ ENTRYPOINT ["dotnet", "ArchiSteamFarm.dll"] diff --git a/Dockerfile.Service b/Dockerfile.Service new file mode 100644 index 000000000..86e4035cf --- /dev/null +++ b/Dockerfile.Service @@ -0,0 +1,12 @@ +FROM microsoft/dotnet:2.0-sdk AS build-env +WORKDIR /app +COPY . ./ +RUN dotnet publish ArchiSteamFarm -c Release -o out /nologo && \ + echo "generic" > "ArchiSteamFarm/out/ArchiSteamFarm.version" && \ + cp "ArchiSteamFarm/scripts/generic/ArchiSteamFarm-Service.sh" "ArchiSteamFarm/out/ArchiSteamFarm-Service.sh" && \ + chmod +x "ArchiSteamFarm/out/ArchiSteamFarm-Service.sh" + +FROM microsoft/dotnet:2.0-runtime +WORKDIR /app +COPY --from=build-env /app/ArchiSteamFarm/out ./ +ENTRYPOINT ["./ArchiSteamFarm-Service.sh"]