Начать локальное обсуждение загрузки/запуска 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-discourse, start-discourse-daemon и даже sleep 60 && start-discourse-daemon… Для большинства методов я пробовал команду sleep.

Добавление .sh-файла в /etc/profile.d не помогло.

.bashrc… Я постоянно забываю, что этот файл выполняется при открытии каждого нового терминала. Конечно, можно мириться с тем, что start-discourse-daemon будет запускаться каждый раз при открытии терминала, но я думаю, есть лучший способ, и к тому же он сработает только если я открою терминал.

Добавление start-discourse-daemon в ~/.profile вызывает ошибку (в ~/start-discourse-stderr.txt): bundle: exec command not found. Но это работает, если я выйду из системы и войду снова.

Использование /etc/systemd/local-discourse.service согласно этому посту на Hackernoon не сработало. Да, я включил его и запустил, и команда 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, но его размер всегда остаётся равным нулю.


Если какой-либо из вышеописанных методов сработал у вас, пожалуйста, напишите, какой именно.

Вы имеете в виду для локальной разработки?

Да. Я запускаю его локально и использую 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 &. И всё заработало.

Извините за такой неконкретный вопрос.