├── .gitignore ├── .overcommit.yml ├── COPYING ├── PKGBUILD ├── README.md ├── makefile ├── rsvlog.sh └── sv-helper.sh /.gitignore: -------------------------------------------------------------------------------- 1 | pkg/ 2 | src/ 3 | *.gz 4 | *.xz 5 | -------------------------------------------------------------------------------- /.overcommit.yml: -------------------------------------------------------------------------------- 1 | --- 2 | PreCommit: 3 | AuthorEmail: 4 | enabled: true 5 | AuthorName: 6 | enabled: true 7 | BerksfileCheck: 8 | enabled: false 9 | BrokenSymlinks: 10 | enabled: true 11 | BundleAudit: 12 | enabled: false 13 | BundleCheck: 14 | enabled: false 15 | BundleOutdated: 16 | enabled: false 17 | CaseConflicts: 18 | enabled: true 19 | ChamberCompare: 20 | enabled: false 21 | ChamberSecurity: 22 | enabled: false 23 | ChamberVerification: 24 | enabled: false 25 | CodeSpellCheck: 26 | enabled: false 27 | CoffeeLint: 28 | enabled: false 29 | CookStyle: 30 | enabled: false 31 | Credo: 32 | enabled: false 33 | CssLint: 34 | enabled: false 35 | DartAnalyzer: 36 | enabled: false 37 | Dogma: 38 | enabled: false 39 | ErbLint: 40 | enabled: false 41 | EsLint: 42 | enabled: false 43 | ExecutePermissions: 44 | enabled: false 45 | Fasterer: 46 | enabled: false 47 | FixMe: 48 | enabled: true 49 | FileSize: 50 | enabled: false 51 | Flay: 52 | enabled: false 53 | Foodcritic: 54 | enabled: false 55 | ForbiddenBranches: 56 | enabled: true 57 | branch_patterns: ['main', 'master'] 58 | GinkgoFocus: 59 | enabled: false 60 | GoFmt: 61 | enabled: false 62 | GolangciLint: 63 | enabled: false 64 | GoLint: 65 | enabled: false 66 | GoVet: 67 | enabled: false 68 | Hadolint: 69 | enabled: false 70 | HamlLint: 71 | enabled: false 72 | HardTabs: 73 | enabled: false 74 | Hlint: 75 | enabled: false 76 | HtmlHint: 77 | enabled: false 78 | HtmlTidy: 79 | enabled: false 80 | ImageOptim: 81 | enabled: false 82 | JavaCheckstyle: 83 | enabled: false 84 | Jscs: 85 | enabled: false 86 | JsHint: 87 | enabled: false 88 | JsLint: 89 | enabled: false 90 | Jsl: 91 | enabled: false 92 | JsonSyntax: 93 | enabled: false 94 | KtLint: 95 | enabled: false 96 | LicenseFinder: 97 | enabled: false 98 | LicenseHeader: 99 | enabled: false 100 | LocalPathsInGemfile: 101 | enabled: false 102 | Mdl: 103 | enabled: false 104 | MergeConflicts: 105 | enabled: true 106 | MixFormat: 107 | enabled: false 108 | PuppetMetadataJsonLint: 109 | enabled: false 110 | NginxTest: 111 | enabled: false 112 | Pep257: 113 | enabled: false 114 | Pep8: 115 | enabled: false 116 | PhpLint: 117 | enabled: false 118 | PhpCs: 119 | enabled: false 120 | PhpCsFixer: 121 | enabled: false 122 | PhpStan: 123 | enabled: false 124 | Pronto: 125 | enabled: false 126 | PuppetLint: 127 | enabled: false 128 | Pycodestyle: 129 | enabled: false 130 | Pydocstyle: 131 | enabled: false 132 | Pyflakes: 133 | enabled: false 134 | Pylint: 135 | enabled: false 136 | PythonFlake8: 137 | enabled: false 138 | RakeTarget: 139 | enabled: false 140 | RailsBestPractices: 141 | enabled: false 142 | RailsSchemaUpToDate: 143 | enabled: false 144 | Reek: 145 | enabled: false 146 | RstLint: 147 | enabled: false 148 | RSpec: 149 | enabled: false 150 | RuboCop: 151 | enabled: true 152 | RubyLint: 153 | enabled: false 154 | RubySyntax: 155 | enabled: false 156 | Scalariform: 157 | enabled: false 158 | Scalastyle: 159 | enabled: false 160 | ScssLint: 161 | enabled: false 162 | SemiStandard: 163 | enabled: false 164 | ShellCheck: 165 | enabled: true 166 | SlimLint: 167 | enabled: false 168 | Sorbet: 169 | enabled: false 170 | Sqlint: 171 | enabled: false 172 | Standard: 173 | enabled: false 174 | Stylelint: 175 | enabled: false 176 | SwiftLint: 177 | enabled: false 178 | TerraformFormat: 179 | enabled: false 180 | TsLint: 181 | enabled: false 182 | TrailingWhitespace: 183 | enabled: true 184 | TravisLint: 185 | enabled: false 186 | Vint: 187 | enabled: false 188 | W3cCss: 189 | enabled: false 190 | W3cHtml: 191 | enabled: false 192 | LineEndings: 193 | enabled: false 194 | XmlLint: 195 | enabled: false 196 | XmlSyntax: 197 | enabled: false 198 | YamlLint: 199 | enabled: false 200 | YamlSyntax: 201 | enabled: true 202 | YardCoverage: 203 | enabled: false 204 | YarnCheck: 205 | enabled: false 206 | CommitMsg: 207 | CapitalizedSubject: 208 | enabled: false 209 | EmptyMessage: 210 | enabled: true 211 | GerritChangeId: 212 | enabled: false 213 | HardTabs: 214 | enabled: false 215 | MessageFormat: 216 | enabled: true 217 | expected_pattern_message: |- 218 | /^(?build|chore|ci|eyes|docs|feat|fix|perf|refactor|revert|sec|style|test)(?\(\w+\))?!?:\s+(?[a-zA-Z].*)$/ 219 | 220 | The (scope) and ! (Breaking Change indicator) are optional, see 221 | 222 | - https://www.conventionalcommits.org/en/v1.0.0/#specification 223 | 224 | The list of commit message types was taken from the Angular commit convention, see 225 | 226 | - https://github.com/conventional-changelog/commitlint/tree/master/%40commitlint/config-conventional 227 | 228 | NOTE: We have added eyes (observability-related) and sec (security/compliance-related) to the list of types, as compared to the Angular commit convention. 229 | 230 | Subject must start with a letter (Case doesn't matter) 231 | pattern: '^(?build|chore|ci|eyes|docs|feat|fix|perf|refactor|revert|sec|style|test)(?\(\w+\))?!?:\s+(?[a-zA-Z].*)$' 232 | sample_message: 'docs(readme): Correct typo' 233 | RussianNovel: 234 | enabled: true 235 | SingleLineSubject: 236 | enabled: true 237 | SpellCheck: 238 | enabled: false 239 | TextWidth: 240 | enabled: true 241 | max_subject_width: 72 242 | TrailingPeriod: 243 | enabled: true 244 | PostCheckout: 245 | BowerInstall: 246 | enabled: false 247 | BundleInstall: 248 | enabled: false 249 | ComposerInstall: 250 | enabled: false 251 | GitLfs: 252 | enabled: false 253 | IndexTags: 254 | enabled: false 255 | NpmInstall: 256 | enabled: false 257 | SubmoduleStatus: 258 | enabled: false 259 | YarnInstall: 260 | enabled: false 261 | PostCommit: 262 | BowerInstall: 263 | enabled: false 264 | BundleInstall: 265 | enabled: false 266 | Commitplease: 267 | enabled: false 268 | ComposerInstall: 269 | enabled: false 270 | GitGuilt: 271 | enabled: false 272 | GitLfs: 273 | enabled: false 274 | IndexTags: 275 | enabled: false 276 | NpmInstall: 277 | enabled: false 278 | SubmoduleStatus: 279 | enabled: false 280 | YarnInstall: 281 | enabled: false 282 | PostMerge: 283 | BowerInstall: 284 | enabled: false 285 | BundleInstall: 286 | enabled: false 287 | ComposerInstall: 288 | enabled: false 289 | GitLfs: 290 | enabled: false 291 | IndexTags: 292 | enabled: false 293 | NpmInstall: 294 | enabled: false 295 | SubmoduleStatus: 296 | enabled: false 297 | YarnInstall: 298 | enabled: false 299 | PostRewrite: 300 | BowerInstall: 301 | enabled: false 302 | BundleInstall: 303 | enabled: false 304 | ComposerInstall: 305 | enabled: false 306 | IndexTags: 307 | enabled: false 308 | NpmInstall: 309 | enabled: false 310 | SubmoduleStatus: 311 | enabled: false 312 | YarnInstall: 313 | enabled: false 314 | PrePush: 315 | Brakeman: 316 | enabled: false 317 | CargoTest: 318 | enabled: false 319 | FlutterTest: 320 | enabled: false 321 | GitLfs: 322 | enabled: true 323 | required_executable: 'git-lfs' 324 | flags: ['pre-push'] 325 | GolangciLint: 326 | enabled: false 327 | GoTest: 328 | enabled: false 329 | Minitest: 330 | enabled: false 331 | MixTest: 332 | enabled: false 333 | PhpUnit: 334 | enabled: false 335 | Pronto: 336 | enabled: false 337 | ProtectedBranches: 338 | enabled: true 339 | PubTest: 340 | enabled: false 341 | Pytest: 342 | enabled: false 343 | PythonNose: 344 | enabled: false 345 | RSpec: 346 | enabled: false 347 | RakeTarget: 348 | enabled: false 349 | TestUnit: 350 | enabled: false 351 | PreRebase: 352 | MergedCommits: 353 | enabled: false 354 | PrepareCommitMsg: 355 | ReplaceBranch: 356 | enabled: false 357 | -------------------------------------------------------------------------------- /COPYING: -------------------------------------------------------------------------------- 1 | Copyright 2015 tj@rubyists.com (bougyman) Tj Vanderpoel 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /PKGBUILD: -------------------------------------------------------------------------------- 1 | # Maintainer: TJ Vanderpoel 2 | pkgname=sv-helper 3 | pkgver=1.0.0 4 | pkgrel=1 5 | pkgdesc="Helpers to make using runit-run, runit-services and runit-dietlibc easier to use" 6 | arch=(i686 x86_64) 7 | url="http://github.com/rubyists/sv-helper" 8 | license=('MIT') 9 | depends=('runit-dietlibc') 10 | optdepends=('runit-services: for a variety of pre-made services' 'runit-run: to boot with runit as a pid 1 replacement') 11 | source=(sv-helper.sh README.md) 12 | md5sums=('308ac1f860a3ea6ab67cffd16fccb7b9' 13 | '415fd25f146edc186c21a902a1fb7e15') 14 | 15 | package() { 16 | install -D -m 0755 sv-helper.sh "$pkgdir/usr/bin/sv-helper" 17 | install -D -m 0644 README.md "$pkgdir/usr/share/doc/sv-helper/README.md" 18 | cd "$pkgdir/usr/bin" 19 | for sv in sv-start sv-stop sv-restart sv-list svls sv-enable sv-disable sv-find;do 20 | ln -s sv-helper $sv 21 | done 22 | } 23 | 24 | # vim:set ts=2 sw=2 et: 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This repository includes two helpers for administering runit services 2 | 3 | [full documentation](https://github.com/rubyists/sv-helper/wiki) 4 | 5 | ### sv-helper.sh 6 | 7 | sv-helper.sh provides the following sv/runit helpers: 8 | 9 | * sv-enable - Enable a service and start it (will restart on boots) 10 | * sv-disable - Disable a service from starting (also stop the service) 11 | * svls [] - Show list of services (Default: all services, pass a service name to see just one) 12 | * sv-find - Find a service, if it exists 13 | * sv-list - List available services 14 | * sv-start - Start a service 15 | * sv-stop - Stop a service 16 | * sv-restart - Restart a service 17 | * make-links) sv-helper make-links Create symlinks for the commands 18 | 19 | ### rsvlog.sh 20 | 21 | rsvlog.sh is meant to be symlinked in a /log directory 22 | as the 'run' script. 23 | 24 | example use of rsvlog.sh 25 | 26 | mkdir -p /etc/sv/aservice/log 27 | ln -s /usr/bin/rsvlog /etc/sv/aservice/log/run 28 | ... 29 | Create the /etc/aservice/run script, and symlink to your $SVDIR. 30 | 31 | in /etc/sv/aservice/log/ you may drop a file named 'conf', 32 | which can modify the log service 33 | 34 | # example conf for syslog logging 35 | SV_LOG_SYSLOG=true 36 | SV_LOG_SYSLOG_PRIORITY=local7.info 37 | 38 | # example conf for svlogd logging, logs go to /var/log/aservice/service_logs in this case 39 | USERGROUP=log:adm 40 | LOGDIR=aservice/service_logs 41 | CURRENT_LOG_FILE=aservice.log 42 | 43 | * `SV_LOG_SYSLOG` if set, will log to syslog, ignoring all other options except for `SV_LOG_SYSLOG_PRIORITY` 44 | * `SV_LOG_SYSLOG_PRIORITY` - The priority to use, in facility.level format. Defaults to daemon.info 45 | * `USERGROUP` is the user and group which the log service runs as 46 | (default is log:adm) 47 | 48 | * `LOGDIR` is the relative directory (under /var/log/) where the 49 | service will log. (default is /var/log/) 50 | 51 | * `CURRENT_LOG_FILE` is the filename for the link to the 'current' logfile. 52 | (default is 'current') 53 | -------------------------------------------------------------------------------- /makefile: -------------------------------------------------------------------------------- 1 | NAME = sv-helper 2 | SHELL = /bin/bash 3 | INSTALL = /usr/bin/install 4 | MSGFMT = /usr/bin/msgfmt 5 | SED = /bin/sed 6 | DESTDIR = /usr/local 7 | BINDIR = /bin 8 | DOCDIR = /share/doc/$(NAME) 9 | 10 | all: 11 | 12 | install: all 13 | $(INSTALL) -d -m 0755 $(DESTDIR)$(BINDIR) 14 | $(INSTALL) -d -m 0755 $(DESTDIR)$(DOCDIR) 15 | $(INSTALL) -m 0755 rsvlog.sh $(DESTDIR)$(BINDIR)/rsvlog 16 | $(INSTALL) -m 0755 sv-helper.sh $(DESTDIR)$(BINDIR)/sv-helper 17 | $(INSTALL) -m 0644 README.md $(DESTDIR)$(DOCDIR)/README.md 18 | $(INSTALL) -m 0644 COPYING $(DESTDIR)$(DOCDIR)/COPYING 19 | cd $(DESTDIR)$(BINDIR); \ 20 | for sv in sv-start sv-stop sv-restart sv-list svls sv-enable sv-disable sv-find; do \ 21 | ln -s sv-helper "$$sv"; \ 22 | done 23 | 24 | uninstall: 25 | rm -vf $(DESTDIR)$(BINDIR)/sv-helper 26 | rm -vf $(DESTDIR)$(BINDIR)/rsvlog 27 | for sv in sv-start sv-stop sv-restart sv-list svls sv-enable sv-disable sv-find; do \ 28 | rm -vf $(DESTDIR)$(BINDIR)/"$$sv"; \ 29 | done 30 | rm -vr $(DESTDIR)$(DOCDIR) 31 | -------------------------------------------------------------------------------- /rsvlog.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Author: TJ Vanderpoel 3 | # Licence: MIT 4 | # This is a generic 'run' script meant to be linked in a log/ directory 5 | # of a runit, daemontools, s6, or similar service. 6 | # It requires svlogd available in the path. 7 | 8 | # If the file './conf' exists, it can modify the behavior 9 | # of the svlogd in these ways: 10 | 11 | # SV_LOG_SYSLOG= (if set, uses syslog) 12 | # SV_LOG_SYSLOG_PRIORITY=daemon.info (default daemon.info) 13 | 14 | # If SV_LOG_SYSLOG is unset, these variables are used for the svlogd 15 | # configuration 16 | # USERGROUP=user:group (default rsvlog:adm) 17 | # SV_LOGDIR=/path/to/log (default `basename $(dirname $PWD)`) 18 | # CURRENT_LOG_FILE=filename.log (default 'current') 19 | 20 | set -e 21 | if [ $0 != "./run" ]; then 22 | echo "This script meant to be linked as ./run in a service/log directory only!" 23 | exit 1 24 | fi 25 | curdir=$(basename $(pwd)) 26 | if [ "$curdir" != "log" ]; then 27 | echo "This script meant to be run from a service/log directory only!" 28 | exit 1 29 | fi 30 | 31 | if [ -f ./conf ]; then 32 | . ./conf 33 | fi 34 | 35 | if [ -n "$SV_LOG_SYSLOG" ]; then 36 | prio=${SV_LOG_SYSLOG_PRIORITY:-daemon.info} 37 | echo "Logging to Syslog with priority ${prio}" 38 | exec logger -p $prio 39 | fi 40 | 41 | if [ "x$SV_LOGDIR" != "x" ]; then 42 | logdir=$SV_LOGDIR 43 | fi 44 | 45 | if [ -w /var/log ]; then 46 | user_group=${USERGROUP:-rsvlog:adm} 47 | if [ "x$logdir" = "x" ]; then 48 | logdir=$(basename $(dirname $(pwd))) 49 | fi 50 | [ -d "/var/log/$logdir" ] || mkdir -p "/var/log/$logdir" 51 | [ -L ./main ] || [ -d ./main ] || ln -s "/var/log/$logdir" ./main 52 | [ -L ./current ] || ln -s main/current 53 | if [ "x$CURRENT_LOG_FILE" != "x" ]; then 54 | [ -L "/var/log/$logdir/$CURRENT_LOG_FILE" ] || ln -s current "/var/log/$logdir/$CURRENT_LOG_FILE" 55 | fi 56 | usergroup=$(stat -c "%U:%G" "/var/log/$logdir") 57 | if [ "$usergroup" != "$user_group" ]; then 58 | chown -R $user_group "/var/log/$logdir" 59 | fi 60 | echo Logging as $user_group to /var/log/$logdir 61 | exec chpst -u $user_group svlogd -t ./main 62 | else 63 | echo Logging in $PWD 64 | if [ "x$CURRENT_LOG_FILE" != "x" ]; then 65 | [ -L "$CURRENT_LOG_FILE" ] || ln -s current "$CURRENT_LOG_FILE" 66 | fi 67 | exec svlogd -t ./ 68 | fi 69 | 70 | # vim: set noet ts=8 sw=8 sts=8 71 | -------------------------------------------------------------------------------- /sv-helper.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Author: bougyman 3 | # License: MIT 4 | # This utility adds helper commands for administering runit services 5 | 6 | set -e 7 | commands="sv-list svls sv-find sv-enable sv-disable sv-start sv-stop sv-restart" 8 | 9 | # Locate the service in the user's $SVDIR or /etc/sv 10 | find_service() { 11 | service=$1 12 | svdir=$(svdir 2>/dev/null) 13 | if [ "x$service" != "x" ];then 14 | if [ -L $svdir/$service ];then 15 | location=$(readlink -f $svdir/$service) 16 | fi 17 | fi 18 | if [ "x$location" != "x" ];then 19 | echo $location 20 | else 21 | if [ -d /etc/sv/$service ];then 22 | echo /etc/sv/$service 23 | elif [ -d "$svdir/../sv/$service" ];then 24 | echo "$svdir/../sv/$service" 25 | elif [ -d "$svdir/../Service/$service" ];then 26 | echo "$svdir/../Service/$service" 27 | elif [ -d "$svdir/../Services/$service" ];then 28 | echo "$svdir/../Services/$service" 29 | fi 30 | fi 31 | } 32 | 33 | # Set to user's $SVDIR or /service 34 | svdir() { 35 | if [ -z $SVDIR ];then 36 | #echo "using /service" >&2 37 | if [ -d /var/service ];then 38 | svdir=/var/service 39 | elif [ -d /service ];then 40 | svdir=/service 41 | elif [ -d /etc/service ];then 42 | svdir=/etc/service 43 | else 44 | echo "No service directory found" 1>&2 45 | exit 127 46 | fi 47 | else 48 | #echo "using $SVDIR" >&2 49 | if [ -d "$SVDIR" ];then 50 | svdir=$SVDIR 51 | else 52 | echo "No service directory found" 1>&2 53 | exit 127 54 | fi 55 | fi 56 | echo $svdir 57 | } 58 | 59 | # Add sudo if we don't own the directory in question 60 | check_owner() { 61 | lndir=$1 62 | if [ ! -w $lndir ];then 63 | echo "sudo " 64 | fi 65 | } 66 | 67 | # Symlink a service (from find_service's path to `svdir`/$service) 68 | enable() { 69 | echo "Enabling $1" >&2 70 | service=$1 71 | svdir=$(find_service $service) 72 | if [ -z "$svdir" -o ! -d "$svdir" ];then 73 | echo "No such service '$service'" >&2 74 | exit 1 75 | fi 76 | ln_dir=$(svdir) 77 | if [ -L "$ln_dir/$service" ];then 78 | echo "Service already enabled!" >&2 79 | echo " $(sv s $ln_dir/$service)" >&2 80 | exit 1 81 | fi 82 | $(check_owner $ln_dir) ln -s $svdir $ln_dir 83 | } 84 | 85 | # Remove a symlink of a service (from find_service's path to `svdir`/$service) 86 | disable() { 87 | echo "Disabling $1" >&2 88 | service=$1 89 | ln_dir=$(svdir) 90 | if [ ! -L "$ln_dir/$service" ];then 91 | echo "Service not enabled!" >&2 92 | exit 1 93 | fi 94 | $(check_owner $ln_dir) rm $ln_dir/$service 95 | } 96 | 97 | # Generic list, of one service or all 98 | list() { 99 | svdir=$(svdir) 100 | if [ ! -z "$1" ];then 101 | $(check_owner $svdir) sv s "$svdir/"$1 102 | else 103 | echo "Listing All Services" 104 | $(check_owner $svdir) sv s "$svdir/"* 105 | fi 106 | } 107 | 108 | make_links() { 109 | me="$0" 110 | echo $me 111 | here="$( cd "$(dirname "$me" )" && pwd )" 112 | for link in $commands;do 113 | [ -L "$here/$link" ] || ln -s "$me" "$here/$link" 114 | done 115 | } 116 | 117 | # Usage 118 | usage() { 119 | cmd=$1 120 | case "$cmd" in 121 | sv-enable) echo "sv-enable - Enable a service and start it (will restart on boots)";; 122 | sv-disable) echo "sv-disable - Disable a service from starting (also stop the service)";; 123 | sv-stop) echo "sv-stop - Stop a service (will come back on reboot)";; 124 | sv-start) echo "sv-start - Start a stopped service";; 125 | sv-restart) echo "sv-restart - Restart a running service";; 126 | svls) echo "svls [] - Show list of services (Default: all services, pass a service name to see just one)";; 127 | sv-find) echo "sv-find - Find a service, if it exists";; 128 | sv-list) echo "sv-list - List available services";; 129 | make-links) echo "Make symlinks for the individual commands";; 130 | commands) echo "Valid Commands: ${commands} make-links" 131 | echo "use command -h for help";; 132 | *) echo "Invalid command (${commands})";; 133 | esac 134 | } 135 | 136 | # Start main program 137 | 138 | cmd=$(basename $0) # Get the command 139 | if [ "$cmd" = "sv-helper" ] || [ "$cmd" = "sv-helper.sh" ];then 140 | cmd=$1 141 | if [ "x${cmd}" = "x" ];then 142 | cmd="commands" 143 | else 144 | shift 145 | fi 146 | fi 147 | # help 148 | while getopts h options 149 | do 150 | case $options in 151 | h) echo $(usage $cmd) 152 | exit;; 153 | esac 154 | done 155 | 156 | svc=$(find_service $@) 157 | case "$cmd" in 158 | enable|sv-enable) enable $@;; 159 | disable|sv-disable) disable $@;; 160 | start|sv-start) $(check_owner $svc) sv u $svc;; 161 | restart|sv-restart) $(check_owner $svc) sv t $svc;; 162 | stop|sv-stop) $(check_owner $svc) sv d $svc;; 163 | ls|svls) list $@;; 164 | make-links) make_links;; 165 | find|sv-find) find_service $@;; 166 | list|sv-list) find $(find_service) -maxdepth 1 -mindepth 1 -type d -exec basename {} \;|sort|tr "\n" " ";echo ;; 167 | *) usage commands;; 168 | esac 169 | --------------------------------------------------------------------------------