Ubuntu の起動/スタートアップに関する地域ディスカッションを開始

以前は動作していましたが、すべてのデータを失い、Ubuntu を再インストールしたため、再度動作させる方法を忘れてしまいました。

ご自身のコンピュータ上でローカルの Discourse を実行し、起動時に自動実行するように設定している方がいらっしゃいましたら、どのように設定されたか教えていただけますでしょうか。

以下は私が試した方法です。

現在、~/.local/bin/start-discourse に以下のスクリプトがあります。

#!/usr/bin/env bash
cd ~/softwares/discourse
bundle exec rails server -p 3030 2> ~/start-discourse-stderr.txt

また、~/.local/bin/start-discourse-daemon には以下があります。

#!/usr/bin/env bash
daemon --name="local-discourse" bash start-discourse

どちらのスクリプトも動作します。しかし、ログインのたびに手動で start-discourse を実行したくありません。

そこで、いくつかの方法を試みました。

crontab -e を使用して @reboot start-discourse を追加しましたが、動作しません。

「スタートアップアプリケーションの設定」を使用しても動作しません。start-discoursestart-discourse-daemon、さらには sleep 60 && start-discourse-daemon も試しました。ここではほとんどの方法で sleep コマンドを試しました。

.sh ファイルを /etc/profile.d に追加しても動作しません。

.bashrc については、新しいターミナルを開くたびに実行されることを忘れていました。確かに start-discourse-daemon をターミナルを開くたびに実行しても構いませんが、より良い方法があると思いますし、ターミナルを開いたときのみ実行されることになります。

~/.profilestart-discourse-daemon を追加すると、~/start-discourse-stderr.txtbundle: exec command not found というエラーが表示されます。しかし、ログアウトして再度ログインすると動作します。

この Hackernoon の投稿に従って /etc/systemd/local-discourse.service を作成しましたが、動作しません。確かに有効化して起動し、systemctl start local-discourse で実行すると動作しますが、有効化していても再起動後は動作しません。

以下の方法でデバッグを試みました。

cd ~/softwares/discourse
bundle exec rails server -p 3030 > ~/start-discourse-stdout.txt 2> ~/start-discourse-stderr.txt

さらに以下のようにも試しました。

echo $(date "+%Y/%m/%d %H:%M:%S") Start script >> ~/start-discourse-log.txt
cd ~/softwares/discourse
echo $(date "+%Y/%m/%d %H:%M:%S") Changed directory, executing script >> ~/start-discourse-log.txt
bundle exec rails server -p 3030 > ~/stard/discourse-stdout.txt 2> ~/start-discourse-stderr.txt
echo $(date "+%Y/%m/%d %H:%M:%S") End of script >> ~/start-discourse-log.txt

上記のほとんどすべての方法で、ログが ~/start-discourse-log.txt ファイルに出力されます。~/start-discourse-stdout.txt も作成されますが、このファイルのサイズは常に 0 のままです。


上記の方法のいずれかがご自身で動作した場合は、どの方法が機能したか教えていただけますでしょうか。

ローカル開発のことですか?

はい。ローカルで実行しており、Discourse を localhost:3030 で使用しています。

何が問題か、手がかりがつかめたと思います。

少なくとも私が .profile で行った方法では、rbenv などが $PATH に追加されていないため、スクリプトで bundle exec ... を実行すると「bundle が見つからない」というエラーが発生します。他のアプローチでも同様の問題があるのか気になります。

ただし、まだ試していません。

初心者のような質問で申し訳ありません。インターネットで、bundle のフルパスを使うべきだと教えてもらいました。

> whereis bundle
bundle: /home/young/.rbenv/shims/bundle

その後、スクリプトを以下のように変更しました:

#!/usr/bin/env bash
cd ~/softwares/discourse
/home/young/.rbenv/shims/bundle exec rails server -p 3030 2> ~/start-discourse-stderr.txt

そして、.profile 内で非同期にスクリプトを実行しました(start-discourse &)。これで動作しました。

焦点の定まらない質問で申し訳ありません。