propellor spin
This commit is contained in:
parent
b2e431bac9
commit
6e490dff6e
|
@ -4,6 +4,7 @@ import Propellor
|
|||
import qualified Propellor.Property.File as File
|
||||
import qualified Propellor.Property.Apt as Apt
|
||||
import Utility.SafeCommand
|
||||
import Utility.FileMode
|
||||
|
||||
import Data.Char
|
||||
|
||||
|
@ -19,22 +20,33 @@ type CronTimes = String
|
|||
--
|
||||
-- The cron job's output will only be emailed if it exits nonzero.
|
||||
job :: Desc -> CronTimes -> UserName -> FilePath -> String -> Property
|
||||
job desc times user cddir command = cronjobfile `File.hasContent`
|
||||
[ "# Generated by propellor"
|
||||
, ""
|
||||
, "SHELL=/bin/sh"
|
||||
, "PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
|
||||
, ""
|
||||
, times ++ "\t" ++ user ++ "\t"
|
||||
++ "chronic flock -n " ++ shellEscape cronjobfile
|
||||
++ " sh -c " ++ shellEscape cmdline
|
||||
job desc times user cddir command = combineProperties ("cronned " ++ desc)
|
||||
[ cronjobfile `File.hasContent`
|
||||
[ "# Generated by propellor"
|
||||
, ""
|
||||
, "SHELL=/bin/sh"
|
||||
, "PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
|
||||
, ""
|
||||
, times ++ "\t" ++ user ++ "\t" ++ shellEscape scriptfile
|
||||
]
|
||||
-- Use a separate script because it makes the cron job name
|
||||
-- prettier in emails, and also allows running the job manually.
|
||||
, scriptfile `File.hasContent`
|
||||
[ "#!/bin/sh"
|
||||
, "# Generated by propellor"
|
||||
, "set -e"
|
||||
, "chronic flock -n " ++ shellEscape cronjobfile
|
||||
++ " sh -c " ++ shellEscape cmdline
|
||||
]
|
||||
, scriptfile `File.mode` combineModes (readModes ++ executeModes)
|
||||
]
|
||||
`requires` Apt.serviceInstalledRunning "cron"
|
||||
`requires` Apt.installed ["util-linux", "moreutils"]
|
||||
`describe` ("cronned " ++ desc)
|
||||
where
|
||||
cmdline = "cd " ++ cddir ++ " && ( " ++ command ++ " )"
|
||||
cronjobfile = "/etc/cron.d/" ++ map sanitize desc
|
||||
cronjobfile = "/etc/cron.d/" ++ name
|
||||
scriptfile = "/usr/local/bin/" ++ name ++ "_cronjob"
|
||||
name = map sanitize desc
|
||||
sanitize c
|
||||
| isAlphaNum c = c
|
||||
| otherwise = '_'
|
||||
|
|
Loading…
Reference in New Issue