Is there a ruby gem to start/stop Windows Scheduled Tasks? - ruby

I'm looking for a ruby gem that can start/stop an already running windows scheduled tasks. Or if a gem does not exist, another work around for doing such a thing.

I believe I found the best answer, but someone else can please correct me if I'm wrong. I think my best option is to just send a command using the Windows CLI.
Looking at the windows the windows documentation it appears the command to stop a task in Windows CLI is schtasks /End [/S <system> [/U <username> [/P [<password>]]]] /TN taskname.
The command to start a task is schtasks /Run [/S <system> [/U <username> [/P [<password>]]]] /TN <taskname>.
So, with those two things in mind, in the ruby script I can use %x(windows cli command), system 'windows cli command', with varying levels of returned data. I believe there's some more from what I was reading, but I think that will work. Again, if anyone has comments or a better plan on action for what I'm trying to do, definitely all ears.

Related

Can't enable/disable a custom task neither from cmd nor with .bat/.vbs files

On another computer running win7 Pro i had no issue and i was using my.bat file with success. Now on my new win10 Home computer i get this error:
C:\Users\User>schtasks /change /tn "AlarmClockEarly" /ENABLE
ERROR: Access is denied.
But if i run the actual state of the task (for example if it is already disabled) i get this:
INFO: Scheduled task "AlarmClockEarly" has already been disabled.
SUCCESS: The parameters of scheduled task "AlarmClockEarly" have been changed.
The task as you can see is a custom made and i don't try to mess with Windows like disabling Updates or something plus i already checked the run with highest priviledges
I run cmd as an Administrator
I am already the Admin account in this PC
I also tried running the command and the .bat itself from the place it is stored C:\Users\User\Scripts>
Can't remember how many things i tried while searching for a solution. So you are my best hope and thank you in advance.
Well i found the solution and for anyone searching the same you ll have to go to C:\windows\system32 then find cmd and go to Properties -> Security. While SYSTEM is highlighted press Advanced at the bottom right and change the Owner from whatever to your account.

Datadog Agent installation on Windows

I am trying to install the Datadog agent on Windows using PowerShell only, not manual however, the APIKEY is not being setup. Is there a way to update/set the APIKEY after installation?
First you may need to download the MSI file:
$image_url = "https://s3.amazonaws.com/ddagent-windows-stable/ddagent-cli-latest.msi"
$destin = "C:\path\to\downloaded\ddagent-cli-latest.msi"
(New-Object System.Net.WebClient).DownloadFile($image_url, $destin)
The actual powershell command for installation (with extra optional arguments included as arguments):
msiexec /i C:\path\to\downloaded\ddagent-cli-latest.msi /l*v C:\path\to\installation_log.txt /quiet APIKEY="$DD_API_KEY" HOSTNAME="$HOSTNAME" TAGS=`"$TAGS,COMMA,DELIMITED`
It's been a while since i've done this (8 months or so?), so it could be outdated, but it used to work :).
Note, if you're running this from a remote provisioning script, you'll probly have to schedule this to be executed not-remotely so that the installation command can be run with heightened permissions, which i believe is required. And you may need to make sure the computer is plugged into the power source (i remember hitting some infuriating issue where that was an arbitrary requirement for Windows scheduled tasks to run, and Windows didn't allow me to configure around that).

task scheduler + windows 7 + won't run task

I have a script that I can run from its directory giving this command:
c:\Users\UserName\Desktop\Folder\V3>C:\Windows\Syste
m32\WScript.exe "c:\Users\UserName\Desktop\Folder\V3\filename.vbs"
but if I try and do it from this location c:\
c:\>C:\Windows\Syste
m32\WScript.exe "c:\Users\UserName\Desktop\Folder\V3\filename.vbs"
I get permission denied, and I do not understand fully.
What permission do I have to have for this to work?
Note: I am trying to schedule this task in task Scheduler Windows7 which has led me to this question as this is what the task scheduler does.
I do not have local admin rights.
found this useful re trying to solve this.
I am just unsure of my permissions.
worked this out see here
Basically itt turns out I have to put the location of every script.vbs in the Start in: (optional) parmaeter of the Action tab for each schedule.

Add nginx.exe as Windows system service (like Apache)?

I set up NGINX as a front end server for static content and I use Apache as a back-end server for other thing.
The thing is I can't find a logical answer that allows me to make nginx.exe a Windows system service (like my Apache).
Any come across an answer to this?
How to do it with Windows Service Wrapper
(Note: There are easier alternatives by now - see also solutions described here below using chocolatey package manager by suneg and using NSSM directly from Adamy)
Download the latest version of Windows Service Wrapper via github or nuget.
Current version as of this writing is v2.2.0
Since v2.x executables for .NET2.0 and .NET4.0 are available - others only on demand.
Rename winsw-*.exe to something like nginxservice.exe.
This is the name that will show up for the process that owns your nginx process.
Place an XML file next to the exe with the same base name, e.g. nginxservice.xml. The contents should be like below (verify your nginx location).
<service>
<id>nginx</id>
<name>nginx</name>
<description>nginx</description>
<executable>c:\nginx\nginx.exe</executable>
<logpath>c:\nginx\</logpath>
<logmode>roll</logmode>
<depend></depend>
<startargument>-p</startargument>
<startargument>c:\nginx</startargument>
<stopexecutable>c:\nginx\nginx.exe</stopexecutable>
<stopargument>-p</stopargument>
<stopargument>c:\nginx</stopargument>
<stopargument>-s</stopargument>
<stopargument>stop</stopargument>
</service>
You can find up to date details about the configuration on the config github page, a generic example showing all possible options here and an installation guide.
Run the command nginxservice.exe install as administrator.
You will now have an nginx service in your Services! (It is set to start automatically on boot; if you want to start your server, you must manually start the service (net start nginx).)
Detailed description of correctly setting up nginx as a Windows Service:
http://web.archive.org/web/20150819035021/http://misterdai.yougeezer.co.uk/posts/2009/10/16/nginx-windows-service/
Additional info not contained in above blog post:
You can find the latest version of the Windows Service Wrapper also via this Maven Repository:
http://repo.jenkins-ci.org
Examples for Maven + Gradle:
<dependency>
<groupId>com.sun.winsw</groupId>
<artifactId>winsw</artifactId>
<version>2.2.0</version>
<classifier>bin</classifier>
<packaging>exe</packaging>
</dependency>
<repository>
<id>jenkinsci</id>
<name>jenkinsci-releases</name>
<url>http://repo.jenkins-ci.org/releases</url>
</repository>
compile "com.sun.winsw:winsw:2.2.0"
repositories {
mavenCentral()
maven { url http://repo.jenkins-ci.org/releases }
}
Download NSSM form
http://nssm.cc/download .
"Run %NSSM_HOME%\nssm.exe install “Nginx”"
Select the Nginx executable in the NSSM dialog, then OK.
Go to Services and start the new created service "Nginx", done.
You can using start.bat and stop.bat to realize the same effect.
start.bat
#ECHO OFF
REM Start Nginx
tasklist /FI "IMAGENAME eq nginx.exe" 2>NUL | find /I /N "nginx.exe">NUL
IF NOT "%ERRORLEVEL%"=="0" (
REM Nginx is NOT running, so start it
c:
cd \nginx
start nginx.exe
ECHO Nginx started.
) else (
ECHO Nginx is already running.
)
stop.bat
#ECHO OFF
REM Stop Nginx
tasklist /FI "IMAGENAME eq nginx.exe" 2>NUL | find /I /N "nginx.exe">NUL
IF "%ERRORLEVEL%"=="0" (
REM Nginx is currently running, so quit it
c:
cd \nginx
nginx.exe -s quit
ECHO Nginx quit issued.
) else (
ECHO Nginx is not currently running.
)
SC.EXE will only work for executables that already support the Windows Services API and can respond properly to start and stop requests from the Services Control Manager (SCM). Other regular applications, not specifically written as a service, will simply fail to start (usually with error 1053)...
For those exe's, you need a "service wrapper" -- a small utility that can accept the start/stop commands from the SCM and run/terminate your application accordingly. Microsoft provides Srvany (which is free yet very basic), but there are several other free and commercial alternatives.
BTW, you should check out this guide showing how to run Nginix as a service, especially step 7 which discusses how to stop Nginix properly. Not every wrapper will support that functionality (Srvany doesn't)...
The easiest way I've found, was using the Chocolatey package manager.
Once Chocolatey is installed, you open an administrative prompt and type:
choco install nginx
You now have a Windows service named 'nginx' running.
NSSM is the best tool to run Nginx as a service.
If you do not want to use any external 3rd party software then you can implement any of these two methods.
Windows Task Scheduler
Windows startup shortcut
Windows Task Scheduler
As mentioned in this answer prepare one start.bat file.
Put this file where nginx.exe is present.
Open windows task scheduler and set up the task as described in this answer to run it indefinitely.
Do not forget to run this task as the highest privilege with the system account, more details can be found here.
Make the task to start daily at a certain time, through the bat file it will check whether the service is already running to avoid creating multiple nginx.exe instances.
If due to some reason Nginx shuts down, within 5 minutes it will start.
Windows Startup shortcut
Create one shortcut of nginx.exe and put it in the startup folder of Windows.
Follow this answer to find your startup location.
Nginx will run automatically whenever you log in to the system.
This one is the easiest. However, it is dependent on user profile i.e. if you are running Nginx on a server, it will run only for your user account, when you log off it stops.
This is ideal for dev environment.
Download zip file from here.
Extract nginx-service.exe from winginx\build and run it.
Rather than turning nginx into a service, or using CMD to start a process, which really doesn't seem to work. I found that Powershell makes it easy to startup nginx as a detached process. I've combined starting nginx with PHP. Below is the script, named "start-nginx.ps1"
$fcgiPort = "127.0.0.1:9000"
$PHPini = "c:\php\php.ini"
$ErrorActionPreference = "SilentlyContinue"
function restart {
Push-Location /nginx
Stop-Process -Force -Name nginx
Start-Process ./nginx.exe -WindowStyle Hidden
Stop-Process -Force -Name php-cgi
Start-Process "c:\php\php-cgi.exe" -ArgumentList ("-b" + $fcgiPort + " -c " + $PHPini) -WindowStyle Hidden
Pop-Location
}
restart
This script can be executed from any directory, but needs to be customized for where your nginx installation is located.
This script includes a silent attempt to kill nginx and PHP before launching both.
Windows systems are supposed to recognize ".ps1" files as powershell, even in the CMD prompt.
I created another small script to kill the running processes, which simply removes the "start-process" lines from this file.
To run at startup, I used the win-R command to navigate to the directory shell:startup
Placing a shortcut to the startup script in this directory, nginx starts at boot!
Powershell also includes a much more sophisticated ability to schedule tasks, and it is possible to schedule this script to run at startup. See This Link
From the article:
>powershell
$trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:30
Register-ScheduledJob -Trigger $trigger -FilePath $HOME/start-nginx.ps1 -Name startNginx
Combined, I think this approach gets you everything you'd need from an nginx windows service and doesn't require any third-party applications.
Official nginx wiki referes on winginx for this purpose. It builds exe-installer in linux environment.
Process looks like this:
sudo apt-get install nsis make
wget https://github.com/InvGate/winginx/archive/master.zip
unzip master.zip
cd winginx-master/
make
ls -lh ./build/nginx-service.exe
To get actual versions you should specify them in Makefile.

Can't install memcached 1.4.5 as a service on Windows

Last night someone told me about memcached. It seems something I can really use to reduce loading times. So today I wanted to download the latest version 1.4.5 for Windows. I found a precompiled version and wanted to use that. However as of version 1.4.5 the -d parameter for Windows has been dropped? And I can't install it as a service.
I tried to install it via SC, and that worked, but then when i tried to start it there came an error message that:
The service is not responding to the control function.
I don't really know what to do now. Can I still use this on Windows as a non-service, or should I get the much older version 1.2.6?
Found this thread for you, it may help:
http://social.msdn.microsoft.com/Forums/eu/windowsazuredevelopment/thread/a185e766-41f5-402c-8519-48242d478d00
I have used ServiceEx to install as a service.
http://serviceex.com/
Here is what I did:
Copied ServiceEx.exe to the Memcached directory
Created Memcached.ini and configured it (http://serviceex.com/files/ServiceEx.ini.sample)
Run command Line
ServiceEx install Memcached
According to the information on this page:
Installing Memcached on Windows
version 1.4.5 or later can not be installed as a service. It must be installed as a Windows task. Instructions to do that (for all users), considering two instances of the application:
CREATE MEMCACHED TASKS
SCHTASKS /create /sc onstart /ru system /tn memcached1 /tr "C:\Xampp\memcached\memcached.exe -m80 -p11211"
SCHTASKS /create /sc onstart /ru system /tn memcached2 /tr "C:\Xampp\memcached\memcached.exe -m80 -p11212"
The tasks above will run automatically on restart. However, if you want to run them immediately after their creation, do as follows:
SCHTASKS /run /tn memcached1
SCHTASKS /run /tn memcached2
To stop the tasks:
SCHTASKS /end /tn memcached1
SCHTASKS /end /tn memcached2
To delete the tasks created, execute the commands below:
DELETE MEMCACHED TASKS
SCHTASKS /delete /tn memcached1 /f
SCHTASKS /delete /tn memcached2 /f

Resources