Overview
Nand is a simple CLI tool to make anything daemon by Ruby. Nand is the meaning of Nandemo of Japanese.
Nandemo of here is a executable file and shell command, a non-executable Ruby file.
For starting daemonize TARGET, You can just type nand start TARGET.
You can stop by nand stop TARGET. nand status TARGET show it running status.
Installation
Add this line to your application's Gemfile:
gem 'nand'
And then execute:
$ bundle
Or install it yourself as:
$ gem install nand
Easy Usage
Command Definition
$ nand SUB_COMMAND TARGET [OPTION]
Start
$ cd /any/path
$ nand start sleep 1000
sleep is Start Success [85596]
You can start TARGET by start SUB_COMMAND.
Though OPTION(s) after TARGET is Nand option, OPTION(s) Nand is unknown,
will be handed over to TARGET.
Here 1000 is handed over to sleep.
And Nand recognizes a shell command sleep as TARGET name.
When TARGET is success to be a daemon process, Nand show TARGET namd and daemon
process id.
Status
For the TARGET sleep running status, Nand status command show running status.
$ cd /any/path
$ nand status sleep
sleep is Running [85596] by USER in /any/path
You can omit the TARGET name sleep because you stay in /any/path.
Stop
Nand stop command stop daemon process with TARGET name.
$ nand stop sleep
sleep is Stopped [85596]
$ nand status sleep
sleep is Not Running in /any/path
You can also omit the TARGET name sleep as status because you stay in /any/path.
A Ruby File
Following forever_sleep.rb in current directory, you can make it daemon with
file name as TARGET name.
require 'nand/plugin'
module Sample
class ForeverSleep
extend Plugin
def self.executor(*argv)
new(*argv)
end
def exec
sleep
end
end
end$ nand start forever_sleep.rb -p Sample::ForeverSleep
forever_sleep.rb is Start Success [86326]
$ nand stop forever_sleep.rb
forever_sleep.rb is Stopped [86326]
Nand can find the executor with exec method from defined class by -p option.
The class need to extend Nand::Plugin.
Then then executor can become a daemon process as TARGET name forever_sleep.rb.
More Usage
Avoid duplicated Nand Options
There are two ways to avoid duplicated Nand options for daemon's process options.
First, the options can be enclosed in "(double) or '(single) quatations.
$ nand start any.sh "--run_dir /tmp"
Others, you can put them after double dash(--).
$ nand start any.sh -- --run_dir /tmp
Pipes to Daemon Process
You can pipe to daemon process STDOUT and STDERR, STDIN by using Nand options
--out and --err, --in.
Here is sleep_echo.sh as follows:
#!/bin/sh
sleep $1
echo $2Then you can start with Nand pipe option.
$ nand start sleep_echo.sh 100 '"foo bar baz"' --out out.log
$ cat out.log
foo bar baz
Running Directory
It is very important that you define the running directory with Nand option --run_dir.
A PID file is put in the running directory and daemon process change the running directory.
If you don't define the running directory, it is the current directory.
$ nand start sleep_echo.sh 100 abc --run_dir /tmp --out out.log
Prohibition of Duplicated Start
Basically, you can not start duplicated daemon process name.
$ nand start sleep 1000
sleep is Start Success [97649]
$ nand start sleep 1000
sleep is Start Failed [PID file exist /any/path/.nand_sleep.pid]
If you would like to start duplicated daemon process name, you can start in another run directory or as another daemon process name.
$ nand start sleep 1000 --run_dir /tmp
sleep1 is Start Success [97611]
$ nand start sleep 1000 -n sleep1
sleep1 is Start Success [97649]
$ nand status -a
sleep is Running [97649] by USER in /run/dir
sleep1 is Running [97765] by USER in /run/dir
sleep is Running [97611] by USER in /tmp
Automatically Stop
Daemon process can automatically stop at the time limit, you defined.
$ nand start vmstat 5 --sec 600
Then vmstat will automatically stop after the lapse of 600 seconds.
Automatically Recovery
If you defined Nand -r option, when the daemon process downed,
it would restart.
$ nand start sleep 100 -r
This sleep 100 will be down after 100 seconds, then sleep 100
will restart soon.
Note
When nand stop, Nand send signal(SIGTERM) to daemon process group, and
wait for termination of daemon process. Your daemon process finish by receiving
a SIGTERM.
You must not remove a PID file for Nand .nand_[DAEMON_NAME].pid.
It has be required to confirm integrity.
If you removed it, Nand output an error. Then you need to stop
the daemon process manually.
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create new Pull Request
License
MIT