我对某些在系统启动时运行 sidekiq 的脚本遇到了很大的问题。脚本是:
#!/bin/bash
cd /home/passenger/application
source /usr/local/rvm/environments/ruby-2.5.1@gemset
bundle exec sidekiq -d -L log/sidekiq.log -e testing -P tmp/sidekiq.pid
它附在里面/etc/rc.local并且可以工作,但它以 root 权限运行。脚本路径:
/home/passenger/run_sidekiq
我需要以用户乘客权限运行它。我试过:
sudo -u passenger bash -c "bundle exec sidekiq -d -L log/sidekiq.log -e testing -P tmp/sidekiq.pid"
以及上面的许多组合,但没有任何效果。
答案1
它不是超级优雅,但您可以将其添加到用户的 crontab 中。
因此,作为用户,passenger
您将运行crontab -e
然后添加
@reboot /PATH/TO/SCRIPT
至底部
答案2
尝试将整个脚本运行为passenger
.
sudo -u passenger -H bash -c /home/passenger/run_sidekiq
如果您之前的试验创建了任何文件,请将其删除,因为非超级用户将无法覆盖它们。
PS,当然,您可以像您尝试做的那样运行所有命令,只需将它们分开;
sudo -u passenger -H bash -c "cd /home/passenger/application; source ...; bundle ...;"
但看起来不太好。