Skip to content
/ jobd Public
forked from wkharold/jobd

Jobd implements cron as a 9p file system

License

Notifications You must be signed in to change notification settings

kare/jobd

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

#jobd

Jobd implements cron as a 9p file system. 9p is a simple file protocol to build sane distributed systems. It's the cornerstone of the Styx Architecture for Distributed Systems which represents the system's resources as a form of file system. Jobd illustrates this approach to system design using the go9p library.

##Installation

jobd uses godep to capture its dependencies. To install it just

$ go get github.com/wkharold/jobd

To build it, make sure you have godep installed and then

$ godep go install

##Usage

jobd --help
Usage of jobd:
  -alsologtostderr=false: log to standard error as well as files
  -dbdir="/var/lib/jobd": Location of the jobd jobs database
  -debug=false: 9p debugging to stderr
  -fsaddr="0.0.0.0:5640": Address where job file service listens for connections
  -log_backtrace_at=:0: when logging hits line file:N, emit a stack trace
  -log_dir="": If non-empty, write log files in this directory
  -logtostderr=false: log to standard error instead of files
  -stderrthreshold=0: logs at or above this threshold go to stderr
  -v=0: log level for V logs
  -vmodule=: comma-separated list of pattern=N settings for file-filtered logging

Once jobd is started the file system it provides can be mounted via

$ mount -t 9p -o protocol=tcp,port=5640 <addr> <mountpoint>

Where addr is the IP address of the box running jobd. Note that it needn't be mounted on the machine running jobd, any box running a Linux 3.x kernel should suffice.

##Design

cron is a time-based job scheduler, it has two primary concerns: jobs which are commands to be executed, and schedules that determine when a job is run. The design of a 9p-based application or system service generally begins with the creation of a name space, think file system subtree, that represents the application's resources in terms of files and directories.

Jobd represents jobs as subdirectories of a jobs directory. Each job subdirectory contains four files:

  • the ctl file which is used to start and stop the job
  • the cmd file that records the command the job executes
  • the log file that is used to retrieve the job's execution history
  • the schedule file that records the job's schedule and its next scheduled execution time

To start a job, write the string start to the ctl file

$ echo -n start > <mountpoint>/jobs/<job>/ctl

Similarly to stop it write the string stop to the ctl file

$ echo -n stop > <mountpoint>/jobs/<job>/ctl

Read from the cmd, log, or schedule file to retrieve the information they provide

$ cat <mountpoint>/jobs/<job>/cmd
echo hello world
$ cat <mountpoint>/jobs/<job>/schedule
0 0/5 * * * ? *
$ cat <mountpoint>/jobs/<job>/log
2014-02-11 09:42:33.454707331 -0600 CST:started
2014-02-11 09:42:35.004655691 -0600 CST:hello world
2014-02-11 09:42:40.003579265 -0600 CST:hello world
2014-02-11 09:42:45.003220637 -0600 CST:hello world
2014-02-11 09:42:50.00294003 -0600 CST:hello world
...
$ rm -rf <mountpoint>/jobs/<job>

Jobd jobs are created via the clone file. The clone file is a peer of the jobs directory in the jobd name space. To create a job write a string of the form: :: to the clone file

$ echo -n 'hello:0 0/5 * * * ? *:echo hello world' > <mountpoint>/clone

About

Jobd implements cron as a 9p file system

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Go 100.0%