Documentation
¶
Index ¶
- Constants
- Variables
- func DefaultUnitPath(name string) (path string)
- func FullServiceName(serviceName string) (nameWithSuffix string)
- func IsKnownStatus(s string) bool
- func IsUnknownServiceError(err error) bool
- func PackageServiceName(loc loc.Locator) string
- func SystemdNameEscape(name string) string
- type Dependencies
- type DisableServiceRequest
- type ListServiceOptions
- type MountServiceSpec
- type NewMountServiceRequest
- type NewPackageServiceRequest
- type NewServiceRequest
- type PackageServiceStatus
- type ServiceManager
- type ServiceSpec
- type UninstallServiceRequest
Constants ¶
const ( // ServiceStatusActivating indicates that service is activating ServiceStatusActivating = "activating" // ServiceStatusDeactivating indicates that service is deactivating ServiceStatusDeactivating = "deactivating" // ServiceStatusFailed means that service has failed ServiceStatusFailed = "failed" // ServiceStatusActive means that service is active ServiceStatusActive = "active" // ServiceStatusInactive indicates that service is not running // Corresponds to exit code 3 ServiceStatusInactive = "inactive" // ServiceStatusUnknown indicates that service does not exist or the status // could not be determined - depending on the command ServiceStatusUnknown = "unknown" )
const ServiceSuffix = ".service"
ServiceSuffix specifies the suffix of the systemd service file
const (
// UnitTypeService defines the service type of the unit file
UnitTypeService = "service"
)
Variables ¶
var DefaultListServiceOptions = ListServiceOptions{ All: true, Type: UnitTypeService, }
DefaultListServiceOptions specifies the default configuration to list package services
Functions ¶
func DefaultUnitPath ¶
DefaultUnitPath returns the default path for the specified systemd unit
func FullServiceName ¶
FullServiceName returns the full service name (incl. the suffix). It will append the service suffix if necessary
func IsKnownStatus ¶
IsKnownStatus returns whether passed service status is a known status
func IsUnknownServiceError ¶
IsUnknownServiceError determines whether the err specifies the 'unknown service' error. Note that systemctl status predicates (e.g. `is-active` or `is-enabled`) will never return this status - only commands will
func PackageServiceName ¶
PackageServiceName returns the name of the package service for the specified package locator
func SystemdNameEscape ¶
SystemdNameEscape escapes the name according to systemd naming convention. See https://www.freedesktop.org/software/systemd/man/systemd-escape.html for reference. It does not provide full implementation of systemd-escape (e.g. does not translate non-leading slashes to dashes and does not translate leading dot) instead it mimicks regular behavior of systemd for handling special characters in a unit name by replacing them with `\x<2-digit hex equivalent>`. It assumes the name to be ascii string
Types ¶
type Dependencies ¶
type Dependencies struct { // Requires configures requirement dependencies on other units. // https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Requires= Requires string `json:"Requires"` // After/Before onfigures ordering dependencies between units. // After sets up after order so that if unit A specifies After=B, A's start-up // is delayed after B // https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Before= After string `json:"After"` // Before is the inverse of After Before string `json:"Before"` }
Dependencies defines dependencies to other services
type DisableServiceRequest ¶
type DisableServiceRequest struct { // Name identifies the service Name string }
DisableServiceRequest describes a request to disable a service
type ListServiceOptions ¶
type ListServiceOptions struct { // All optionally indicates whether to query all units (and not only those in memory) All bool // Type optionally specifies the unit type Type string // State optionally specifies the unit state State string // Pattern optionally specifies the unit pattern Pattern string }
ListServiceOptions describes additional configuration for listing services. An empty value of this type is usable
type MountServiceSpec ¶
type MountServiceSpec struct { // What specifies defines the absolute path of a device node, file or other resource to mount What string `json:"where"` // Where specifies the absolute path of a directory for the mount point Where string `json:"what"` // Type specifies the file system type. // This setting is optional Type string `json:"type"` // Options lists mount options to use when mounting // This setting is optional Options []string `json:"options,omitempty"` // TimeoutSec configures the time to wait for the mount command to finish. // Takes a unit-less value in seconds, or a time span value such as "5min 20s". // Pass "0" to disable the timeout logic. // This setting is optional and the default is set from the manager configuration // file's DefaultTimeoutStartSec= option TimeoutSec string `json:"timeout_sec"` }
MountServiceSpec describes specification for a systemd mount service
func (*MountServiceSpec) CheckAndSetDefaults ¶
func (r *MountServiceSpec) CheckAndSetDefaults() error
CheckAndSetDefaults verifies that this specification object is valid
type NewMountServiceRequest ¶
type NewMountServiceRequest struct { // ServiceSpec defines the mount service ServiceSpec MountServiceSpec // Name is a service name, e.g. temp.service Name string `json:"Name"` // NoBlock means we won't block and wait until service starts NoBlock bool `json:"-"` }
NewMountServiceRequest describes a request to create a new systemd mount service
func (*NewMountServiceRequest) CheckAndSetDefaults ¶
func (r *NewMountServiceRequest) CheckAndSetDefaults() error
CheckAndSetDefaults verifies that this request object is valid
type NewPackageServiceRequest ¶
type NewPackageServiceRequest struct { ServiceSpec // GravityPath is a path to gravity executable GravityPath string `json:"-"` // Package is a package holding a command to execute Package loc.Locator `json:"-"` // ConfigPackage is a package with configuration ConfigPackage loc.Locator `json:"-"` // NoBlock means async operation NoBlock bool `json:"-"` }
NewPackageServiceRequest specifies parameters needed to create a new service that is using gravity package manager
func MergeInto ¶
func MergeInto(req NewPackageServiceRequest, preset NewPackageServiceRequest) NewPackageServiceRequest
MergeInto applies preset config to existing request if request's field is not initialized. Returns result of merge
type NewServiceRequest ¶
type NewServiceRequest struct { // ServiceSpec defines the service ServiceSpec // Name is the service name. // It can be the absolute path to the unit file if the file is located // in a non-standard location Name string `json:"Name"` // NoBlock means we won't block and wait until service starts NoBlock bool `json:"-"` // ReloadConfiguration forces a daemon-reload after writing the service file ReloadConfiguration bool `json:"-"` }
NewServiceRequest describes a request to create a systemd service
func (*NewServiceRequest) CheckAndSetDefaults ¶
func (r *NewServiceRequest) CheckAndSetDefaults() error
CheckAndSetDefaults verifies that this request object is valid
type PackageServiceStatus ¶
type PackageServiceStatus struct { // Package identifies the package Package loc.Locator // Status is a service status Status string }
PackageServiceStatus provides the status of a running service
type ServiceManager ¶
type ServiceManager interface { // IsPackageServiceInstalled checks if the package service is installed IsPackageServiceInstalled(pkg loc.Locator) (bool, error) // InstallPackageService installs service with system service manager InstallPackageService(NewPackageServiceRequest) error // UninstallPackageService uninstalls service UninstallPackageService(pkg loc.Locator) error // DisablePackageService disables service without stopping it DisablePackageService(pkg loc.Locator) error // EnablePackageService enables service without starting it EnablePackageService(pkg loc.Locator) error // ListPackageServices lists installed package services ListPackageServices(ListServiceOptions) ([]PackageServiceStatus, error) // StartPackageService starts package service StartPackageService(pkg loc.Locator, noBlock bool) error // StopPackageService stops package service StopPackageService(pkg loc.Locator) error // StopPackageServiceCommand returns command that will stop this service StopPackageServiceCommand(pkg loc.Locator) ([]string, error) // RestartPackageService restarts package service RestartPackageService(pkg loc.Locator) error // StatusPackageService returns status of a package service StatusPackageService(pkg loc.Locator) (string, error) // InstallService installs a service with the system service manager InstallService(NewServiceRequest) error // InstallMountService installs a new mount service with the system service // manager InstallMountService(NewMountServiceRequest) error // UninstallService uninstalls service UninstallService(UninstallServiceRequest) error // DisableService disables service without stopping it DisableService(DisableServiceRequest) error // StartService starts service StartService(name string, noBlock bool) error // StopService stops service StopService(name string) error // RestartService restarts service RestartService(name string) error // StatusService returns status of a service StatusService(name string) (string, error) // Version returns systemd version Version() (int, error) }
ServiceManager is an interface for collaborating with system service managers, e.g. systemd for host packages
func New ¶
func New() (ServiceManager, error)
New creates a new instance of the default service manager
type ServiceSpec ¶
type ServiceSpec struct { // Dependencies defines dependencies to other services Dependencies Dependencies `json:"Dependencies"` // StartCommand defines the command to execute when the service starts StartCommand string `json:"StartCommand"` // StartPreCommand defines the commands to execute before the service starts StartPreCommands []string `json:"StartPreCommands,omitempty"` // StartPostCommand defines the command to execute after the service starts StartPostCommand string `json:"StartPostCommand"` // StopCommand defines the command to execute when the service stops StopCommand string `json:"StopCommand"` // StopPostCommand defines the command to execute after the service stops StopPostCommand string `json:"StopPostCommand"` // Timeout is a timeout in seconds Timeout int `json:"Timeout"` // Type is a service type Type string `json:"Type"` // User is a user name owning the process User string `json:"User"` // LimitNoFile sets ulimits for this process LimitNoFile int `json:"LimitNOFILE"` // Restart sets restart policy Restart string `json:"Restart"` // RestartSec is a period between restarts RestartSec int `json:"RestartSec"` // KillMode is a systemd kill mode, 'none' by default KillMode string `json:"KillMode"` // KillSignal specifies the signal to use. Defaults to SIGTERM. // See https://www.freedesktop.org/software/systemd/man/systemd.kill.html KillSignal string `json:"KillSignal"` // WantedBy sets up basic target this service is wanted by, // changes install section WantedBy string `json:"WantedBy"` // RemainAfterExit tells service to remain after the process has exited RemainAfterExit bool `json:"RemainAfterExit"` // Environment is environment variables to set for the service Environment map[string]string `json:"Environment"` // TasksMax specifies the maximum number of tasks that may be created in the unit TasksMax string `json:"TasksMax"` // TimeoutStopSec specifies the stop timeout. // The value is either a unitless value in seconds or a string such as "5min 20s" or "infinity" // to disable timeout logic. TimeoutStopSec string `json:"TimeoutStopSec"` // ConditionPathExists specifies start condition for the service based on existence // of the specified file. Can be negated by prefixing the path with "!" ConditionPathExists string `json:"ConditionPathExists"` // RestartPreventExitStatus lists exit status definitions that, when returned by the main service // process, will prevent automatic service restarts. // See https://www.freedesktop.org/software/systemd/man/systemd.service.html#RestartPreventExitStatus= RestartPreventExitStatus string `json:"RestartPreventExitStatus"` // SuccessExitStatus lists exit codes to be considered successful termination. // See https://www.freedesktop.org/software/systemd/man/systemd.service.html#SuccessExitStatus= SuccessExitStatus string `json:"SuccessExitStatus"` // WorkingDirectory sets the working directory for executed processes. // See https://www.freedesktop.org/software/systemd/man/systemd.exec.html#Paths WorkingDirectory string `json:"WorkingDirectory"` }
ServiceSpec is a generic service specification
type UninstallServiceRequest ¶
type UninstallServiceRequest struct { // Name identifies the service Name string }
UninstallServiceRequest describes a request to uninstall a service