This cookbook installs the Non-Sucking Service Manager (http://nssm.cc), and exposes resources to install
and remove Windows services.
- Chef 12.6+
- Windows
Add recipe[nssm] to run list.
To install a Windows service:
nssm 'service name' do
program 'C:\Windows\System32\java.exe'
args '-jar C:/path/to/my-executable.jar'
action :install
endTo remove a Windows service:
nssm 'service name' do
action :remove
endA parameter is a hash key representing the same name as the registry entry which controls the associated functionality. So, for example, the following sets the Startup directory, I/O redirection, and File rotation for a service:
nssm 'service name' do
program 'C:\Windows\System32\java.exe'
args '-jar C:/path/to/my-executable.jar'
params(
AppDirectory: 'C:/path/to',
AppStdout: 'C:/path/to/log/service.log',
AppStderr: 'C:/path/to/log/error.log',
AppRotateFiles: 1
)
action :install
endHaving spaces in servicename, program and params attributes is not a problem, but spaces in an argument is a
different matter.
When dealing with an argument containing spaces, surround it with 3 double quotes:
nssm 'service name' do
program 'C:\Program Files\Java\jdk1.7.0_67\bin\java.exe'
args '-jar """C:/path/with spaces to/my-executable.jar"""'
action :install
endWhen dealing with arguments requiring
interpolation and it contains one or
more arguments with spaces, then encapsulate the args string using %() notation and use """ around arguments
with spaces:
my_path_with_spaces = 'C:/path/with spaces to/my-executable.jar'
nssm 'service name' do
program 'C:\Program Files\Java\jdk1.7.0_67\bin\java.exe'
args %(-jar """#{my_path_with_spaces}""")
action :install
endnode['nssm']['src']- This can either be a URI or a local path to nssm zip.node['nssm']['sha256']- SHA-256 checksum of the file. Chef will not download it if the local file matches the checksum.
install- Install a Windows service.remove- Remove Windows service.
servicename- Name attribute. The name of the Windows service.program- The program to be run as a service.args- String of arguments for the program. Optionalparams- Hash of key value pairs where key represents associated registry entry. Optionalstart- Start service after installing. Default` - true
The NSSM cookbook includes custom ChefSpec matchers you can use to test your own cookbooks that consume Windows cookbook LWRPs.
Example Matcher Usage
expect(chef_run).to install_nssm('service name').with(
:program 'C:\Windows\System32\java.exe'
:args '-jar C:/path/to/my-executable.jar'
)NSSM Cookbook Matchers
- install_nssm(servicename)
- remove_nssm(servicename)
- Ask specific questions on Stack Overflow.
- Report bugs and discuss potential features in Github issues.
Please refer to CONTRIBUTING.
MIT - see the accompanying LICENSE file for details.