runfile-exec 0.1.0
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/README.md +49 -0
- data/lib/runfile-exec.rb +2 -0
- data/lib/runfile-exec/extensions.rb +60 -0
- data/lib/runfile-exec/version.rb +5 -0
- metadata +62 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 90779b05a4e99841b74174a7749ee877f5128c3e
|
4
|
+
data.tar.gz: bdba048aedc64945d67f6a7a5de4df31e2641011
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e43cb9139fd411d5d79df41a71cabdecbc2e4ac124b831d5dc1235a9238e9e6c6aeee895d6cd27f5304ee0279e7af1e08c0db07c7cc664b9f3ab9de5c842c7d7
|
7
|
+
data.tar.gz: e6489265df4b6d22b6ff1c85095f10b340b26e7098d70a90c67170749257afe027064a369e0070d35a1b1771d0fc7f66ee2c14e3e7c46135b4b8fb20e9885e47
|
data/README.md
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
Runfile Exec
|
2
|
+
============
|
3
|
+
|
4
|
+
[](http://badge.fury.io/rb/runfile-exec)
|
5
|
+
|
6
|
+
[Runfile](https://github.com/DannyBen/runfile) extensions for executing shell commands.
|
7
|
+
|
8
|
+
## Install
|
9
|
+
|
10
|
+
$ gem install runfile-exec
|
11
|
+
|
12
|
+
## Usage
|
13
|
+
|
14
|
+
Put this in your Runfile
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
require "runfile-exec"
|
18
|
+
include RunfileExec
|
19
|
+
```
|
20
|
+
|
21
|
+
And then you can use any of these commands in your Runfile actions:
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
# Print and run a command. Wait until it is done and continue.
|
25
|
+
run 'pwd'
|
26
|
+
|
27
|
+
# Print and run a command. Wait until it is done and exit.
|
28
|
+
run! 'pwd'
|
29
|
+
|
30
|
+
# Run a command in the background
|
31
|
+
run_bg 'some-long-running --daemon'
|
32
|
+
|
33
|
+
# Run a command in the background, log to a log file and save the process
|
34
|
+
# ID in a pid file for later reference
|
35
|
+
run_bg 'some-long-running --daemon', log: 'my.log', pid: 'daemon'
|
36
|
+
|
37
|
+
# Stop a command started with 'run_bg'. Provide the name of he pid file you
|
38
|
+
# used in 'run_bg'
|
39
|
+
stop_bg 'daemon'
|
40
|
+
```
|
41
|
+
|
42
|
+
## About PID files ##
|
43
|
+
|
44
|
+
PID files are stored in the working directory by default.
|
45
|
+
To change the location, add this at the beginning of your Runfile:
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
RunfileExec.pid_dir = './tmp'
|
49
|
+
```
|
data/lib/runfile-exec.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
# This module provides methods for easily and politely run shell commands
|
2
|
+
# through a Runfile action.
|
3
|
+
# It is mainly a convenient wrapper around `system` and `exec` and it also
|
4
|
+
# adds functions for running background tasks with ease.
|
5
|
+
|
6
|
+
module RunfileExec
|
7
|
+
@@pid_dir = nil
|
8
|
+
|
9
|
+
def self.pid_dir=(dir)
|
10
|
+
@@pid_dir = dir
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.pid_dir
|
14
|
+
@@pid_dir
|
15
|
+
end
|
16
|
+
|
17
|
+
# Run a command, wait until it is done and continue
|
18
|
+
def run(cmd)
|
19
|
+
say "!txtgrn!> #{cmd}"
|
20
|
+
system cmd
|
21
|
+
end
|
22
|
+
module_function :run
|
23
|
+
|
24
|
+
# Run a command, wait until it is done, then exit
|
25
|
+
def run!(cmd)
|
26
|
+
say "!txtgrn!> #{cmd}"
|
27
|
+
exec cmd
|
28
|
+
end
|
29
|
+
module_function :run!
|
30
|
+
|
31
|
+
# Run a command in the background, optionally log to a log file and save
|
32
|
+
# the process ID in a pid file
|
33
|
+
def run_bg(cmd, pid: nil, log: '/dev/null')
|
34
|
+
full_cmd = "exec #{cmd} >#{log} 2>&1"
|
35
|
+
say "!txtgrn!> #{full_cmd}"
|
36
|
+
process = IO.popen "exec #{cmd} >#{log} 2>&1"
|
37
|
+
File.write pidfile(pid), process.pid if pid
|
38
|
+
return process.pid
|
39
|
+
end
|
40
|
+
|
41
|
+
# Stop a command started with 'run_bg'. Provide the name of he pid file you
|
42
|
+
# used in 'run_bg'
|
43
|
+
def stop_bg(pid)
|
44
|
+
file = pidfile(pid)
|
45
|
+
if File.exist? file
|
46
|
+
pid = File.read file
|
47
|
+
File.delete file
|
48
|
+
run "kill -s TERM #{pid}"
|
49
|
+
else
|
50
|
+
say "!txtred!PID file not found."
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def pidfile(pid)
|
57
|
+
@@pid_dir ? "#{@@pid_dir}/#{pid}.pid" : "#{pid}.pid"
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
metadata
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: runfile-exec
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Danny Ben Shitrit
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-11-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: colsole
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.2'
|
27
|
+
description: A collection of utility methods to run shell commands for Runfile
|
28
|
+
email: db@dannyben.com
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- README.md
|
34
|
+
- lib/runfile-exec.rb
|
35
|
+
- lib/runfile-exec/extensions.rb
|
36
|
+
- lib/runfile-exec/version.rb
|
37
|
+
homepage: https://github.com/DannyBen/runfile-exec
|
38
|
+
licenses:
|
39
|
+
- MIT
|
40
|
+
metadata: {}
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
requirements: []
|
56
|
+
rubyforge_project:
|
57
|
+
rubygems_version: 2.4.6
|
58
|
+
signing_key:
|
59
|
+
specification_version: 4
|
60
|
+
summary: Runfile methods for executing shell commands
|
61
|
+
test_files: []
|
62
|
+
has_rdoc:
|