web-dev-qa-db-ja.com

カスタムcronでシェルスクリプトを実行する方法はありますか?

私はこれが初めてなので、おそらくこれが最善の解決策ではありませんが、シェルスクリプトキャッシュウォーマーを作成しました。

wget --quiet http://www.example.com/custom-sitemap.xml --output-document - |
egrep -o "http://www.example.com/[^<]+" | wget --delete-after -i -

キャッシュウォーマーモジュールを使用して、drushコマンドでもこれを行うことができます。

数時間ごとにこれらのコマンドを実行する方法を理解する必要があります。

私の理解では、サーバーでスクリプトを実行するElysia cronを使用してカスタムcronジョブを作成できると考えていましたが、これが可能かどうか、実装方法について混乱しています。

スクリプトセクションに移動して、次のように記述します。

*/15 * * * * custom_cron

無効な行だそうです。

カスタムの時間指定cronジョブを作成してから、elysia cron APIを使用してモジュールが私のシェルスクリプトを呼び出すようにできますか?

ありがとう!

1
Nicholas Dynan

Linuxのcrontabに関するドキュメントは、マニュアルページにあります。

man 5 crontab

5は、表示するセクションを示すために重要です(セクション1はコマンドラインのドキュメントを示しています)。

Cronはほとんどの場合/から実行されるため、指定したスクリプトは見つかりません。 2つの解決策があります。rootの場合に該当する特定のユーザーから実行できることを確認するか、スクリプトを/ var/...または/ etc/...の下のどこかに配置してから、crontabスクリプトを変更して、フルパス:

*/15 * * * * /home/my_user_name/custom_cron

Crontabを使用して、変数を定義することもできます。また、完全な環境がロードされていないことも覚えておいてください。完全な環境が必要な場合は、スクリプトでこれを行う必要があります。

別の方法として、15分ごとに実行する必要がない場合は、/ etcのcronディレクトリの下にスクリプトを配置します。私の場合、cron.hourlyを使用します。

これは、crontabでセットアップを行わず、そのディレクトリの下にスクリプトをコピーするだけです。

/etc/cron.hourly/drupal.sh

その.shファイルは、chmod 755 /etc/cron.hourly/drupal.shのように実行可能である(xフラグが設定されている)必要があります。

1
Alexis Wilke

私はあなたがcrontabを編集できるか、またはホスティングプロバイダーと話すことでcrontabファイルを編集できると信じています。

Elysia Cron API を使用してカスタムモジュールで実行する必要がある場合は、次の方法で実行できると思います。

function example_cronapi($op, $job = NULL) {
  $items['example_Shell_cron'] = array(
    'description' => 'Send mail with news',
    'rule' => '0 */4 * * *', // Every 4 hours
  );
  return $items;
}


function example_Shell_cron() {
  Shell_exec ('wget --quiet http://www.example.com/custom-sitemap.xml --output-document - |
egrep -o "http://www.example.com/[^<]+" | wget --delete-after -i -');
}
1
Sumit Madan