web-dev-qa-db-ja.com

スケジュール通りにpythonスクリプトを実行するには?

私は2つを持っています Python scripts特定の期間に1日に2回実行したいマシン上。このタスクを自動化するにはどうすればよいですか?私は家から離れてしばらくの間コンピューターを離れるので、それらをサイトにアップロードして、何もせずに自動的にサイトから実行されるようにします。

これどうやってするの?

16
Zip

Linuxマシンを使用している場合は、cronを使用できます。 Cronは、特定の時間に特定のタスクを実行するために使用されるシステムデーモンです。

cronは、指定された時間に実行されるコマンドのリストを含むテキストファイルであるcrontabの原理に基づいて動作します。特定の形式に従います。詳細はman 5 crontabで説明されています

Crontabの形式

各セクションはスペースで区切られ、最後のセクションには1つ以上のスペースが含まれます。セクション1〜5内ではスペースは使用できません。セクション1〜5は、タスクを実行するタイミングと頻度を示すために使用されます。これは、cronジョブのレイアウト方法です。

分(0-59)、時間(0-23、0 =真夜中)、日(1-31)、月(1-12)、平日(0-6、0 =日曜日)、コマンド

01 04 1 1 1 /usr/bin/somedirectory/somecommand

上記の例は、1月1日の午前4時1分に1月の毎週月曜日に/ usr/bin/somedirectory/somecommandを実行します。アスタリスク(*)を使用して、期間のすべてのインスタンス(毎時間、毎週日、毎月など)を使用できます。コード:

01 04 * * * /usr/bin/somedirectory/somecommand

上記の例では、毎月毎日午前4時1分に/ usr/bin/somedirectory/somecommandが実行されます。

コンマ区切り値を使用して、特定のコマンドの複数のインスタンスを一定期間内に実行できます。ダッシュで区切られた値を使用して、コマンドを継続的に実行できます。コード:

01,31 04,05 1-15 1,6 * /usr/bin/somedirectory/somecommand

上記の例は、毎年1月と6月の1日から15日の午前4時と午前5時を過ぎた01と31に/usr/bin/somedirectory/somecommandを実行します。

上記の例の「/ usr/bin/somedirectory/somecommand」テキストは、指定された時間に実行されるタスクを示しています。上記の例に示すように、目的のコマンドへのフルパスを使用することをお勧めします。端末にwhich somecommandと入力して、somecommandへのフルパスを見つけます。 crontabは、適切に編集および保存されるとすぐに実行を開始します。

スクリプトを時間単位ごとに何度か実行することができます。たとえば、10分ごとに実行する場合は、次のcrontabエントリを使用します(10で割り切れる分で実行します:0、10、20、30など)。

*/10 * * * * /usr/bin/somedirectory/somecommand

これは、より扱いにくいものと同等です

0,10,20,30,40,50 * * * * /usr/bin/somedirectory/somecommand

15
SanketDG

Windowsでは、2つのソリューションを考え出しました。

最初のオプション:.batファイルを作成します。

ステップ1

実行するコマンドと実行されるスクリプトファイルを示す.batファイルを作成します。たとえば、次のとおりです。

start C:\Users\userX\Python.exe C:\Users\userX\PycharmProjects\Automation_tasks\create_workbook.py

ステップ2

タスクスケジューラを開き、タスクスケジューラライブラリをクリックして、実行されている現在のタスクを確認します。 [タスクの作成]オプションをクリックします。

Main window Task Scheduler

ステップ3

[全般]タブで、新しいタスクの名前を入力し、オプションRun whether user is logged on or notをクリックし、オプションRun with highest privilegesをチェックして、OSの適切なバージョンを設定します(私の場合はWindows 7, Windows Server 2008 R2

High privileges

ステップ4

[アクション]タブで、[新規]ボタンをクリックし、次のように入力します。

Program/Scriptsで、タスクスケジューラが.batファイルを実行するために呼び出すPowershellパスを検索する必要があります。私の場合、PowershellパスはC:\Windows\System32\WindowsPowerShell\v1.0\powershell.exeでした

Add arguments(optional)で、Powershellによって実行されるファイルのパスを入力する必要があります。私の場合、パスは次のとおりです。

C:\Users\userX\Desktop\run_the_bat_file.bat

Start(オプション)では、ファイルのパスを入力する必要がありますが、.batファイルの名前は入力しません:

C:\Users\userX\Desktop\

Configure the settings for Powershell

ステップ5

[トリガー]タブをクリックし、このタスクを実行する頻度を選択します。

Frequency of the task to be executed

ステップ6

最後に、タスクスケジューラライブラリからタスクを選択し、実行オプションをクリックして、タスクが本当に機能するかどうかをテストします。

Test your task

2番目のオプション:タスクスケジューラで.pyファイルを実行する

ステップ1

タスクスケジューラを開き、タスクスケジューラライブラリをクリックして、実行されている現在のタスクを確認します。 [タスクの作成]オプションをクリックします。

Main window Task Scheduler

ステップ2

[全般]タブで、新しいタスクの名前を入力し、オプションRun whether user is logged on or notをクリックし、オプションRun with highest privilegesをチェックして、OSの適切なバージョンを設定します(私の場合はWindows 7, Windows Server 2008 R2

High privileges

ステップ3

[アクション]タブで、[新規]ボタンをクリックし、次のように入力します。

Program/Scriptsで、タスクスケジューラがpythonスクリプトを実行するために呼び出すPython.exeパスを検索する必要があります。私の場合、Python.exeのパスはC:\Users\userX\python.exeでした

Add arguments(optional)には、onlypythonスクリプトの名前を入力する必要があります。私の場合、パスは次のとおりです。

Permissions_dump.py

Start in(optional)では、ファイルのパスを入力する必要がありますが、pythonスクリプトの名前は入力しません:

C:\Users\userX\PycharmProjects\1099_vendors_costs

Python configuration

ステップ4

[トリガー]タブをクリックし、このタスクを実行する頻度を選択します。

Frequency of the task to be executed

ステップ5

最後に、タスクスケジューラライブラリからタスクを選択し、実行オプションをクリックして、タスクが本当に機能するかどうかをテストします。

Test your task

別のオプション(.pyを.exeに変換する場合)

ライブラリCx_Freezeを使用して.pyを.exeに変換し、タスクスケジューラを使用してこのタスクを自動化する場合は、次の手順を実行する必要があります。

ステップ1

[タスクの作成]をクリックし、[アクション]タブをクリックして、次を入力します。

Program/Scriptsで、タスクスケジューラが.exeスクリプトを実行するために呼び出すC:\Windows\Explorer.exeパスを検索する必要があります。

Add arguments(optional)に必要なのはonly.exeファイルの名前を入力する:CustomerPopulation.exe

Start in(optional)では、ファイルのパスを入力する必要がありますが、.exeファイルの名前は入力しません:

C:\Users\userX\PycharmProjects\executables

exe parameters

参照:

  1. https://gis.stackexchange.com/questions/140110/running-python-script-in-task-scheduler-script-will-not-run?newreg=603bcdbc381b41a283e5d8d0561b835e
  2. https://www.youtube.com/watch?v=oJ4nktysxnE
  3. https://www.youtube.com/watch?v=n2Cr_YRQk7o
5
abautista

OSXを使用している場合、タスクをスケジュールするには launchd をお勧めします。 launchctl と呼ばれるlaunchd用のOSX CLIがありますが、GUIを好むなら、私の好むものは launchcontrol です。

1
yothenberg