在 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,但我觉得有更好的方法,而且它只在打开终端时才会运行。

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 文件,但该文件大小会一直保持在 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 &。结果成功了。

抱歉问题有些散乱。