Ubuntu 20.04 @reboot cronjobがスクリプトを実行しない

Ubuntu 20.04 @reboot cronjobがスクリプトを実行しない

私はUbuntu 20.04にvultrサーバーを持っていて、次のディレクトリにbashスクリプトを作成しています

/startupscripts/apilibro

スクリプト内で、yarn directus startを実行してDirectusサーバーを起動する必要があります。

!#/bin/bash
cd /var/www/vhosts/librocambio.cl/core.librocambio.cl/apilibro
/usr/bin/yarn directus start

スクリプトの読み取り、書き込み、実行のためにchmod 755を付与し、最後にcrontab -eを実行して、サーバーの再起動時に実行される次のコードを追加します。

@reboot /startupscripts/apilibro

私の問題は、yarn directus start コマンドが実行されないことです。ローカルで実行するとコマンドは機能しますが、Ubuntu の再起動では機能しません。最後に、bash スクリプトに touch index.js という行を追加してテストすると、機能しますが、yarn directus start コマンドは実行されません。

この問題を解決する方法をご存知ですか?

答え1

1つ目の方法、

crondのログを確認するにはコマンドを使用できると思います

tail -f /var/log/cron.log

ここでの出力は何らかの情報を提供する可能性があります。

cron.logがない場合は、このコマンドを使用してrsyslogサービスを再起動します。

sed -i '/#cron.*/s/^#//g' /etc/rsyslog.d/50-default.conf

systemctl restart rsyslog.service

2番目

おそらく、yarn の env が crond を実行するユーザーと一致していないのではないでしょうか。

答え2

問題は解決しました。これが私が問題を解決するために行ったことです。

  1. 私は bash apilibro を使用してスクリプトを手動で実行したので、環境変数に yarn が存在しないことに気付きました。@Artur Medim が言うように追加しただけです。
  2. 私の Node.js バージョンはデフォルトで 10.xx になっていることに気付きました。nvm を使用して変更すると動作しますが、システムを再起動するか、ssh ターミナルを閉じると、Node.js バージョンがデフォルトに変更されます。そのため、この問題が発生しないように、バージョンを 16.xx に正しく更新しました。

その後、スクリプトを手動で、また cronjob で実行できるようになりました。ご回答くださった皆様に感謝します。

関連情報