再起動後にmongo DBサーバーを実行し、アプリケーションを実行する次のスクリプトがあります。
私が書いたスクリプトは次のとおりです:
sudo systemctl restart mongod
cd airnotifier/
sudo python3 ./app.py
そして、このスクリプトをcrontabに追加して、再起動時に実行されるようにスケジュールします。
@reboot /home/user/project/script.sh
次にコマンドを使用してマシンを再起動します
sudo reboot
しかし、何も起こりません。何が問題なのか誰か教えてもらえますか?
答え1
そんなことしないで!
あなたのアプローチには2つの間違いがあります。
cron を使用して systemd サービスを開始しないでください。systemd には、コンピューターの起動/再起動時にサービスを開始する独自の方法があります。
cron ジョブで使用されるスクリプト内では使用しないでください
sudo
。ファイル/プログラムへのフルパスも提供する必要があります。
1. 使用enable
すでにmongod
systemdサービスなので、システムの再起動時に手動で起動する必要はありません。自動的に起動するはずです。起動しない場合は、次のコマンドを使用します。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/
場合(の前の を忘れないでください)、ユーザー ディレクトリでは起動しないためです。cron
root
sudo
crontab -e
cron のもう 1 つの特徴は、完全な PATH などのすべての環境変数が備わっていないことです。そのため、コマンドへのパスも必要になる場合がありますpython3
。
お役に立てれば