.NETで構築したアプリケーションをcronで実行できなかった。

個人的な備忘録です。

具体的な目標として、

・Raspberry pi 3

・.NET6で構築したC#コンソールアプリケーション

・cronによる定期実行

ということをしたい、という状態です。

既に構築した状況として、cronのインストール済み、.NETのインストールも実施済みです。

$ dotnet アプリケーション.dll

を実行することで呼び出すことが可能なのも確認済みです。

上記のコマンドを呼び出すシェルスクリプト(hogehoge.sh)を用意し、cronを設定して実行したのですが、うまくいきませんでした。

対策を行った結果についてですが、

  1. crontab -eコマンドでcronの設定を行った。
    設定実行ユーザーが実行ユーザーとなるため、シェルのパーミッションをそれに合わせて変更した。
  2. cronの基本実行ディレクトリは、実行ユーザーのhomeとなる。
    hogehoge.shの中でcdコマンドにより、対象ディレクトリに移動した。
    ※アプリケーション.dllのパスの問題もあるし、アプリケーション上でカレントディレクトリにファイルを出力する予定であったため。
  3. cronを実行するパスにdotnetが存在していなかった。
    実行ユーザーでhogehoge.shを直接実行した場合、うまくいったのだけれど、アプリケーション.dllが実行されなかった。
    どうやら「dotnet」というコマンド自体が認識されていないようで、crontab -eの内容に、以下の内容を追加した。
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/home/ユーザー名/.dotnet

cronの設定や、実行ディレクトリなどについては検索すると簡単に出てきてくれたのですが、dotnetを認識していない、というのは中々わかりませんでした。

というか検索しても出なかったので、予想で設定しました。

結果として実行されているので、まあよかったかな。