そんなことしないで!

そんなことしないで!

再起動後にmongo DBサーバーを実行し、アプリケーションを実行する次のスクリプトがあります。

私が書いたスクリプトは次のとおりです:

sudo systemctl restart mongod
cd airnotifier/
sudo python3 ./app.py

そして、このスクリプトをcrontabに追加して、再起動時に実行されるようにスケジュールします。

@reboot /home/user/project/script.sh

次にコマンドを使用してマシンを再起動します

sudo reboot 

しかし、何も起こりません。何が問題なのか誰か教えてもらえますか?

答え1

そんなことしないで!

あなたのアプローチには2つの間違いがあります。

  1. cron を使用して systemd サービスを開始しないでください。systemd には、コンピューターの起動/再起動時にサービスを開始する独自の方法があります。

  2. cron ジョブで使用されるスクリプト内では使用しないでくださいsudo。ファイル/プログラムへのフルパスも提供する必要があります。

1. 使用enable

すでにmongodsystemdサービスなので、システムの再起動時に手動で起動する必要はありません。自動的に起動するはずです。起動しない場合は、次のコマンドを使用します。1回だけ:

sudo systemctl enable mongod

注記。このコマンドを使用すると、コンピューターの起動時に mongod.service が自動的に起動するようになります。

何らかの理由でこれが機能しない場合は、上記のコマンドを使用したときにどのようなエラーが発生するかなど、詳細を追加して質問を更新してください。

2. 使用sudo crontab e

経由で管理者権限でスクリプトを実行したい場合は、スクリプト内にcronを入れないでください。sudo

を使用して既存の行を削除しますcrontab -e

次に、次のコマンドを使用します。

sudo crontab -e

次に、ファイルに次の行を追加します。

@reboot /home/user/project/script.sh

script.sh は次のようになります。

#!/bin/bash
cd /full/path/to/airnotifier/
/usr/bin/python3 /full/path/to/airnotifier/app.py

などの完全なパスが必要な理由は、がユーザーとして起動する/home/USER/project/airnotifier/場合(の前の を忘れないでください)、ユーザー ディレクトリでは起動しないためです。cronrootsudocrontab -e

cron のもう 1 つの特徴は、完全な PATH などのすべての環境変数が備わっていないことです。そのため、コマンドへのパスも必要になる場合がありますpython3

お役に立てれば

関連情報