Windows Server 서비스 프로세스 사용(pyhon과 유사한 supervisor)
python과 유사한 슈퍼visor.
서비스 제작 방법
Servicebase를 계승해 OnStart()와 OnStop()의 오버라이드에 하고 싶은 일을 구현하면 좋겠다.
프로세스의 시작, 하강, 재시작, 프로세스의 정지 여부를 확인하십시오.using System.Diagnostics;
using System.ServiceProcess;
using System.Threading.Tasks;
namespace Suporvisor
{
class Suporvisor: ServiceBase
{
public static void Main()
{
var service = new Suporvisor();
ServiceBase.Run(service);
return;
}
const int checkIntervalMillseconds = 1000;
const string exePath = @"C:\Supervisor\Program.exe";
readonly object lockObject = new object();
Process process;
Task checker;
public Suporvisor()
{
AutoLog = true;
CanShutdown = true;
CanStop = true;
ServiceName = "Supervisor";
}
protected override void OnStart(string[] args)
{
log("OnStart");
lock (lockObject)
{
spawnWithoutLock();
}
checker = check();
}
protected override void OnStop()
{
log("OnStop");
stop();
checker.Wait();
ExitCode = 0;
}
async Task check()
{
while (true)
{
lock (lockObject)
{
if (process == null)
{
return;
}
if (process.HasExited)
{
spawnWithoutLock();
log("find stopped process so restart");
}
}
await Task.Delay(checkIntervalMillseconds).ConfigureAwait(false);
}
}
void spawnWithoutLock()
{
var info = new ProcessStartInfo(exePath);
info.CreateNoWindow = true;
info.UseShellExecute = false;
info.RedirectStandardError = true;
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.CreateNoWindow = true;
info.ErrorDialog = false;
info.WindowStyle = ProcessWindowStyle.Hidden;
process = Process.Start(info);
}
void stop()
{
lock (lockObject)
{
if (process != null)
{
if (!process.HasExited)
{
process.Kill();
}
process.Close();
process = null;
}
}
}
void log(string format, params object[] args)
{
var message = string.Format(format, args);
EventLog.WriteEntry(message);
}
}
}
Windows Service에 실행 파일 등록
sc.exe 명령을 사용하면 명령줄에서 서비스에 대한 등록, 삭제, 시작, 정지를 실행할 수 있습니다.
C:\Supervisor에서 완료된 프로그램을 설정합니다.sc.exe create supervisor binPath= "C:\Supervisor\Suporvisor.exe" start= auto displayname= "Suporvisor"
sc.exe start supervisor
제어판에서 서비스 일람을 보면 방금 등록한 내용이 일람표에 추가됩니다.
이벤트 로그 확인
컨트롤 프로그램과 달리 출력이 보이지 않기 때문에 컨트롤 패널에서 이벤트 뷰어를 시작해서 로그를 확인합니다.
잘 돌아가는 것 같습니다.
총결산
로그인 서비스는 다음과 같은 장점이 있다
- Windows Server를 다시 시작할 때 자동으로 시작 가능
-서비스 프로그램 자체 충돌 시 자동으로 프로그램 재부팅 또는 실행 등 등록 반응 가능
- 표준 이벤트 뷰어를 통해 로그를 쉽게 볼 수 있습니다.
Reference
이 문제에 관하여(Windows Server 서비스 프로세스 사용(pyhon과 유사한 supervisor)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tadokoro/items/f1643021f97dd9e8cafa
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
using System.Diagnostics;
using System.ServiceProcess;
using System.Threading.Tasks;
namespace Suporvisor
{
class Suporvisor: ServiceBase
{
public static void Main()
{
var service = new Suporvisor();
ServiceBase.Run(service);
return;
}
const int checkIntervalMillseconds = 1000;
const string exePath = @"C:\Supervisor\Program.exe";
readonly object lockObject = new object();
Process process;
Task checker;
public Suporvisor()
{
AutoLog = true;
CanShutdown = true;
CanStop = true;
ServiceName = "Supervisor";
}
protected override void OnStart(string[] args)
{
log("OnStart");
lock (lockObject)
{
spawnWithoutLock();
}
checker = check();
}
protected override void OnStop()
{
log("OnStop");
stop();
checker.Wait();
ExitCode = 0;
}
async Task check()
{
while (true)
{
lock (lockObject)
{
if (process == null)
{
return;
}
if (process.HasExited)
{
spawnWithoutLock();
log("find stopped process so restart");
}
}
await Task.Delay(checkIntervalMillseconds).ConfigureAwait(false);
}
}
void spawnWithoutLock()
{
var info = new ProcessStartInfo(exePath);
info.CreateNoWindow = true;
info.UseShellExecute = false;
info.RedirectStandardError = true;
info.RedirectStandardInput = true;
info.RedirectStandardOutput = true;
info.CreateNoWindow = true;
info.ErrorDialog = false;
info.WindowStyle = ProcessWindowStyle.Hidden;
process = Process.Start(info);
}
void stop()
{
lock (lockObject)
{
if (process != null)
{
if (!process.HasExited)
{
process.Kill();
}
process.Close();
process = null;
}
}
}
void log(string format, params object[] args)
{
var message = string.Format(format, args);
EventLog.WriteEntry(message);
}
}
}
sc.exe 명령을 사용하면 명령줄에서 서비스에 대한 등록, 삭제, 시작, 정지를 실행할 수 있습니다.
C:\Supervisor에서 완료된 프로그램을 설정합니다.
sc.exe create supervisor binPath= "C:\Supervisor\Suporvisor.exe" start= auto displayname= "Suporvisor"
sc.exe start supervisor
제어판에서 서비스 일람을 보면 방금 등록한 내용이 일람표에 추가됩니다.이벤트 로그 확인
컨트롤 프로그램과 달리 출력이 보이지 않기 때문에 컨트롤 패널에서 이벤트 뷰어를 시작해서 로그를 확인합니다.
잘 돌아가는 것 같습니다.
총결산
로그인 서비스는 다음과 같은 장점이 있다
- Windows Server를 다시 시작할 때 자동으로 시작 가능
-서비스 프로그램 자체 충돌 시 자동으로 프로그램 재부팅 또는 실행 등 등록 반응 가능
- 표준 이벤트 뷰어를 통해 로그를 쉽게 볼 수 있습니다.
Reference
이 문제에 관하여(Windows Server 서비스 프로세스 사용(pyhon과 유사한 supervisor)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tadokoro/items/f1643021f97dd9e8cafa
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
로그인 서비스는 다음과 같은 장점이 있다
- Windows Server를 다시 시작할 때 자동으로 시작 가능
-서비스 프로그램 자체 충돌 시 자동으로 프로그램 재부팅 또는 실행 등 등록 반응 가능
- 표준 이벤트 뷰어를 통해 로그를 쉽게 볼 수 있습니다.
Reference
이 문제에 관하여(Windows Server 서비스 프로세스 사용(pyhon과 유사한 supervisor)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tadokoro/items/f1643021f97dd9e8cafa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)