使用 crontab 时,shell 脚本中的某些命令无法执行

使用 crontab 时,shell 脚本中的某些命令无法执行

我在 ruby​​ 文件中编写了用于重启某些服务、终止进程并运行的 shell 脚本,它成功了。我想每小时运行一次这个 shell 脚本,因此我将 bash 命令放入 crontab,cron 每小时运行一次,但我的 shell 脚本只执行终止进程,最后三个命令(运行 3 个 ruby​​ 文件)不执行。

重启

sudo pkill -9 -f '/home/myuser/.rvm/rubies/ruby-2.4.0/bin/ruby /home/myuser/subscribe.rb'
sudo pkill -9 -f '/home/myuser/.rvm/rubies/ruby-2.4.0/bin/ruby /home/myuser/retry1.rb'
sudo pkill -9 -f '/home/myuser/.rvm/rubies/ruby-2.4.0/bin/ruby /home/myuser/retry2.rb'
sleep .5
nohup /home/myuser/.rvm/rubies/ruby-2.4.0/bin/ruby /home/myuser/subscribe.rb &!
nohup /home/myuser/.rvm/rubies/ruby-2.4.0/bin/ruby /home/myuser/retry1.rb &!
nohup /home/myuser/.rvm/rubies/ruby-2.4.0/bin/ruby /home/myuser/retry2.rb &!

定时任务

0 */1 * * * bash -lc "/home/myuser/restart.sh"

答案1

最后,我找到了一个解决办法。

问题的关键不在于权限,而在于与 cron 执行的 shell 环境不同,尤其是运行 ruby​​ 文件。

因为我用于rvm管理 ruby​​ 版本,所以我找到了示例

#!/usr/bin/env bash

# load rvm ruby
source /usr/local/rvm/environments/ruby-2.1.1@projectX

bundle install
ruby /path/to/script.rb
rake do something

来源 :https://rvm.io/integration/cron#example-script

因此,我修改了我的 shell 脚本如下:

#!/usr/bin/env bash
sudo pkill -9 -f 'ruby /home/myuser/subscribe.rb'
sudo pkill -9 -f 'ruby /home/myuser/retry1.rb'
sudo pkill -9 -f 'ruby /home/myuser/retry2.rb'
sleep .5
source /home/mysuser/.rvm/environments/ruby-2.4.0
nohup ruby /home/myuser/subscribe.rb &
nohup ruby /home/myuser/retry1.rb &
nohup ruby /home/myuser/retry2.rb &

相关内容