我想在 Ubuntu 服务器启动时启动一个 unicorn 服务器。我修改了文件,/etc/rc.local
使其包含以下内容:
echo 'test' >> sudo /tmp/unicorn
test -e /etc/ssh/ssh_host_dsa_key || dpkg-reconfigure openssh-server
sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
RAILS_ENV=staging
/etc/init.d/unicorn_lescollectionneurs start >> sudo /tmp/unicorn
exit 0
当我运行文件时,它可以工作,我的服务器启动了,但里面什么都没有/tmp/unicorn
。当我重新启动服务器时,unicorn 没有运行,但创建了符号链接。我不知道如何进行跟踪。
我能做些什么?
根据 Florian Diesch 的回答进行编辑
我做了一些更改。这是新脚本:
test -e /etc/ssh/ssh_host_dsa_key || dpkg-reconfigure openssh-server
ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
export RAILS_ENV=staging
sudo -H -u deployer bash -c '/etc/init.d/unicorn_lescollectionneurs start' >> /tmp/unicorn
exit 0
我想以“部署者”身份运行该脚本,因为我使用 rbenv :
echo "starting" >> /tmp/unicorn_log
sig 0 && echo >&2 "Already running" && exit 0
run "$CMD" >> /tmp/unicorn_log
echo "end starting" >> /tmp/unicorn_log
文件中/tmp/unicorn_log/
仅显示“正在启动”。是否可以显示更多日志?
答案1
命令
echo 'test' >> sudo /tmp/unicorn
是相同的
echo 'test' /tmp/unicorn >> sudo
所以它附加了以下行
test /tmp/unicorn
sudo
到当前文件夹中的文件。
如果你想使用 root 权限附加test
到文件,/tmp/unicorn
你应该使用
echo 'test' | sudo tee -a /tmp/unicorn
相反。/etc/rc.local
无论如何,您根本不需要 root 来运行,sudo
而只需
echo 'test' >> /tmp/unicorn
同样命令
/etc/init.d/unicorn_lescollectionneurs start >> sudo /tmp/unicorn
是相同的
/etc/init.d/unicorn_lescollectionneurs start /tmp/unicorn >> sudo
根据/etc/init.d/unicorn_lescollectionneurs
编写方式,这可能会或可能不会产生错误(很可能不会,/tmp/unicorn
只是被忽略)。
线路
RAILS_ENV=staging
只是设置变量RAILS_ENV
,而不是导出它。因此它不适用于/etc/init.d/unicorn_lescollectionneurs
及其子进程。使用
export RAILS_ENV=staging
反而。