lsyncd/examples/lpostcmd.lua

119 lines
2.7 KiB
Lua
Raw Permalink Normal View History

2011-02-08 15:10:48 +00:00
-----
-- User configuration file for lsyncd.
2011-02-08 15:16:29 +00:00
-- This needs lsyncd >= 2.0.3
2011-02-08 15:10:48 +00:00
--
-- This configuration will execute a command on the remote host
-- after every successfullycompleted rsync operation.
-- for example to restart servlets on the target host or so.
local rsyncpostcmd = {
-- based on default rsync.
default.rsync,
2015-01-30 07:25:53 +00:00
checkgauge = {
default.rsync.checkgauge,
host = true,
targetdir = true,
target = true,
postcmd = true,
},
2011-02-08 15:21:39 +00:00
-- for this config it is important to keep maxProcesses at 1, so
-- the postcmds will only be spawned after the rsync completed
2011-02-08 15:10:48 +00:00
maxProcesses = 1,
-- called whenever something is to be done
2018-03-09 12:32:58 +00:00
action = function
(
inlet
)
local event = inlet.getEvent( )
local config = inlet.getConfig( )
2011-02-08 15:10:48 +00:00
-- if the event is a blanket event and not the startup,
-- its there to spawn the webservice restart at the target.
2018-03-09 12:32:58 +00:00
if event.etype == 'Blanket'
then
2011-02-08 15:21:39 +00:00
-- uses rawget to test if "isPostcmd" has been set without
2011-02-08 15:10:48 +00:00
-- triggering an error if not.
2018-03-09 12:32:58 +00:00
local isPostcmd = rawget( event, 'isPostcmd' )
if isPostcmd
then
spawn(event, "/usr/bin/ssh",
2011-02-08 15:21:39 +00:00
config.host, config.postcmd)
2018-03-09 12:32:58 +00:00
return
2011-02-08 15:10:48 +00:00
else
2018-03-09 12:32:58 +00:00
-- this is the startup, forwards it to default routine.
return default.rsync.action(inlet)
end
error( 'this should never be reached' )
2011-02-08 15:10:48 +00:00
end
2011-02-08 15:21:39 +00:00
-- for any other event, a blanket event is created that
2011-02-08 15:10:48 +00:00
-- will stack on the queue and do the postcmd when its finished
local sync = inlet.createBlanketEvent()
2011-02-08 15:16:29 +00:00
sync.isPostcmd = true
-- the original event is simply forwarded to the normal action handler
2011-02-08 15:10:48 +00:00
return default.rsync.action(inlet)
end,
2011-02-08 15:16:29 +00:00
-- called when a process exited.
-- this can be a rsync command, the startup rsync or the postcmd
2018-03-09 12:32:58 +00:00
collect = function
(
agent,
exitcode
)
2011-02-08 15:16:29 +00:00
-- for the ssh commands 255 is network error -> try again
2018-03-09 12:32:58 +00:00
local isPostcmd = rawget( agent, 'isPostcmd' )
if not agent.isList and agent.etype == "Blanket" and isPostcmd
then
if exitcode == 255 then return 'again' end
2011-02-08 15:10:48 +00:00
return
else
--- everything else, forward to default collection handler
2018-03-09 12:32:58 +00:00
return default.collect( agent,exitcode )
2011-02-08 15:10:48 +00:00
end
2018-03-09 12:32:58 +00:00
error( 'this should never be reached' )
2014-01-03 08:11:48 +00:00
end,
2011-02-08 15:10:48 +00:00
2011-02-08 15:16:29 +00:00
-- called before anything else
-- builds the target from host and targetdir
2018-03-09 12:32:58 +00:00
prepare = function
(
config,
level,
skipTarget
)
if not config.host
then
error( 'rsyncpostcmd needs "host" configured', 4 )
2011-02-08 15:10:48 +00:00
end
2018-03-09 12:32:58 +00:00
if not config.targetdir
then
error( 'rsyncpostcmd needs "targetdir" configured', 4)
2011-02-08 15:10:48 +00:00
end
2018-03-09 12:32:58 +00:00
if not config.target
then
2011-02-08 15:10:48 +00:00
config.target = config.host .. ":" .. config.targetdir
end
2018-03-09 12:32:58 +00:00
return default.rsync.prepare(config, level, skipTarget)
2011-02-08 15:10:48 +00:00
end
}
sync {
rsyncpostcmd,
2018-03-09 12:32:58 +00:00
delay = 3,
source = '/path/to/src',
host = 'localhost',
targetdir = '/path/to/trg',
postcmd = '/usr/local/bin/dopostcmd',
2011-02-08 15:10:48 +00:00
}