Windowsのタスクスケジューラという機能をご存知ですか?
タスクスケジューラは決められた時間や決まった間隔でプログラムやスクリプトを実行したい場合にその時間やプログラムを設定できる機能です。
これを設定しておけば、PCの前に自分がいなくても、PCを起動しておけば指定のプログラムを実行してくれて便利です。
今回この機能を使って毎日決まった時間にプログラムを実行するように設定してみました。そのときハマってしまったことも含めて備忘録として残しておこうと思います。
タスクスケジューラで設定したプログラムが自動で実行されない?!
私が実行するように指定したプログラムですが、その実行内容をテキストファイルにログとして書き出す機能をつけています。
普通にPCを起動した場合はプログラムを実行できる
普通にプログラムを実行した場合は、ちゃんとログに書き出して実行結果を確認することができましたが、タスクスケジューラから実行した場合は、そのログには何も書き込まれていないことが判明。
ここでちょっとハマってしまいました。
プログラム内ではログの書き出し先として作業フォルダ(プログラムがあるフォルダ)をちゃんと指定しているにもかかわらずです。
自動実行するにはタスクスケジューラの設定で作業フォルダの指定が必要だった
いろいろと試行錯誤しながら調べてみた結果、なんとタスクスケジューラの設定内に作業フォルダを指定する項目があったのです。
名前が「開始(オプション)」となっていてすごく分かりづらいのですが、この項目が作業フォルダを指定する項目になっています。
ここに、作業フォルダ(プログラムがあるフォルダ)を指定したら、すんなりとログに実行結果が書き出されるようになりました。
Windowsタスクスケジューラでプログラムを自動実行するための設定手順
それでは、タスクスケジュールを設定するまでを簡単におさらいしたいと思います。
まずはコントロールパネルの「システムとセキュリティ」にある「管理ツール」から「タスクのスケジュール」を選択。
「タスクの作成」をクリックします。
全般タブで「名前」をつけます。
トリガータブでスケジュールを設定します。
操作タブで新規ボタンをクリック。実行したいプログラムと作業フォルダを指定します。
できたらOKボタンで設定を保存します。他にもいろいろと細かい設定ができるので、自分の環境に合わせて設定してみてください。
おわりに
ちなみに私が設定したのはWindowServer2008R2ですが、Windows Vista以降からこのような設定項目に変わってしまっているようです。(画像はWindows7の画面を説明のために使用しています。)
作業フォルダを設定しないと、同じフォルダ内の他プログラムを呼び出すような処理がある場合、他のプログラムを見つけられず、エラーになってしまうこともあるようなので注意してください。
WindowsタスクスケジューラはサーバーOSで良く利用する機能だと思います。他にもWindows Serverを導入したときに知っておきたい情報を記事にしていますので、参考にどうぞ。