edaemon 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/edaemon/helper/process.rb +20 -0
- data/lib/edaemon/helper.rb +5 -0
- data/lib/edaemon/server.rb +51 -0
- data/lib/edaemon/version.rb +5 -0
- data/lib/edaemon.rb +10 -0
- metadata +48 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 68ec3821de78d554f5253e3691d4d2720336d8fb1a7431e07c0670995d2c7f20
|
4
|
+
data.tar.gz: 6e3dd6798afe1b014cf7e3ff7d0a5a705c897f13a568b5f23184161e0bfd455b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 454a6e6088ad5131bd8a471bc742f44dc8ed7e277bf9fa15ae7db795a17f1ed76df3b23f33df90dbaf63c14b53c92a4ba9b7c112373d919d6e7afca9ecda57a6
|
7
|
+
data.tar.gz: acea99ffdeae163a610ef89fdbed3c228c0842ef109f7be48f5739a1c09d8897592256bf200e7cffb5b9d1a95b63a9b20aeac6cce7908c85994a769ecaecf5f8
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Edaemon::Helper::Process
|
4
|
+
class << self
|
5
|
+
# :nocov:
|
6
|
+
def list
|
7
|
+
`ps ax`.split("\n")
|
8
|
+
end
|
9
|
+
# :nocov:
|
10
|
+
|
11
|
+
def pids
|
12
|
+
list.map { |row| row.scan(/\A {0,}([0-9]{1,})/) }
|
13
|
+
.flatten
|
14
|
+
.compact
|
15
|
+
.uniq
|
16
|
+
.map(&:to_i)
|
17
|
+
.sort
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class Edaemon::Server
|
4
|
+
PID_FILE_PATH = './edaemon.pid'
|
5
|
+
LOG_FILE_PATH = './edaemon.log'
|
6
|
+
|
7
|
+
Error = Class.new(StandardError)
|
8
|
+
ApplicationAllreadyRunnedError = Class.new(Error)
|
9
|
+
|
10
|
+
def initialize(block:)
|
11
|
+
@block = block
|
12
|
+
end
|
13
|
+
|
14
|
+
# TODO: Конфиг лога
|
15
|
+
# TODO: Конфиг пид файла
|
16
|
+
def start
|
17
|
+
# TODO: simplecov raise почему не подсвечивается
|
18
|
+
raise ApplicationAllreadyRunnedError if pid_runned?(pid: saved_pid)
|
19
|
+
|
20
|
+
pid = fork_block!
|
21
|
+
save_pid!(pid: pid)
|
22
|
+
pid
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
attr_reader :block
|
28
|
+
|
29
|
+
def saved_pid
|
30
|
+
return unless File.exist?(PID_FILE_PATH)
|
31
|
+
|
32
|
+
File.open(PID_FILE_PATH).read.to_i
|
33
|
+
end
|
34
|
+
|
35
|
+
def pid_runned?(pid:)
|
36
|
+
Edaemon::Helper::Process.pids.include?(pid)
|
37
|
+
end
|
38
|
+
|
39
|
+
def fork_block!
|
40
|
+
# TODO: Переделать не на call из блока а на простой вызов переданного метода
|
41
|
+
Kernel.fork do
|
42
|
+
STDOUT.reopen(File.open(LOG_FILE_PATH, 'a'))
|
43
|
+
STDOUT.sync = true
|
44
|
+
block.call
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def save_pid!(pid:)
|
49
|
+
File.open(PID_FILE_PATH, 'w') { |f| f.write("#{pid}\n") }
|
50
|
+
end
|
51
|
+
end
|
data/lib/edaemon.rb
ADDED
metadata
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: edaemon
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Vladimir Bardokin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-12-18 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description:
|
14
|
+
email:
|
15
|
+
- mecha@twodev.ru
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/edaemon.rb
|
21
|
+
- lib/edaemon/helper.rb
|
22
|
+
- lib/edaemon/helper/process.rb
|
23
|
+
- lib/edaemon/server.rb
|
24
|
+
- lib/edaemon/version.rb
|
25
|
+
homepage: https://github.com/Mecha23/edaemon
|
26
|
+
licenses:
|
27
|
+
- MIT
|
28
|
+
metadata: {}
|
29
|
+
post_install_message:
|
30
|
+
rdoc_options: []
|
31
|
+
require_paths:
|
32
|
+
- lib
|
33
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ">="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 2.7.1
|
38
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '0'
|
43
|
+
requirements: []
|
44
|
+
rubygems_version: 3.1.2
|
45
|
+
signing_key:
|
46
|
+
specification_version: 4
|
47
|
+
summary: Easily run script on daemon
|
48
|
+
test_files: []
|