@artem_music

Запуск скрипта ruby по крону?

Написал скрипт, который делает бэкап базы данных и отправляет на гугл диск:
def db_backup
  puts "Backing up DB..."
  time = Time.new
  date = time.strftime("%d.%m.%y_%H.%M.%S")

  %x[pg_dump dbuser > ~/backups/db.sql]
  %x[tar czPf ~/backups/db_#{date}.tar.gz ~/backups/db.sql]
  %x[rm ~/backups/db.sql]
  %x[drive upload --file ~/backups/db_#{date}.tar.gz -p 0B-UlAr4zyFN-OUtsQVI0ZVE]
  %x[rm ~/backups/db_#{date}.tar.gz]

  puts "File was uploaded"
end

if __FILE__ == $0
  db_backup
end

При запуске из терминала все прекрасно работает - дамп создается, загружается и тд, но при попытке настроить автоматическое выполнение этого скрипта не происходит ровным счетом ничего. Вот то, что прописал в crontab -e:
* * * * * ruby /home/username/myapp/db_backup.rb
Также пробовал следующее:
* * * * * /bin/bash -l -c 'ruby /home/username/myapp/db_backup.rb'

К сожалению, безрезультатно. Как сделать корректно?
  • Вопрос задан
  • 438 просмотров
Решения вопроса 1
@artem_music Автор вопроса
Решение оказалось банальным: проставить права на запуск скрипта, прописать полные пути на все (в том числе на библиотеку работы с google drive).
Скрипт:
#!/home/user/.rvm/gems/ruby-2.2.5/wrappers/ruby 
def db_backup 
  puts "Backing up DB..." 
  time = Time.new 
  date = time.strftime("%d.%m.%y_%H.%M.%S") 

  # формируем бэкап 
  %x[pg_dump dbname > ~/backups/db.sql] 
  # сжимаем 
  %x[tar czPf ~/backups/db_#{date}.tar.gz ~/backups/db.sql] 
  # удаляем дамп 
  %x[rm ~/backups/db.sql] 
  # загружаем сжатый бэкап на google drive (FOLDER_ID - идентификатор папки на google drive) 
  %x[/usr/sbin/drive upload --file ~/backups/db_#{date}.tar.gz -p FOLDER_ID] 
  # удаляем сжатый бэкап с сервера 
  %x[rm ~/backups/db_#{date}.tar.gz] 

  puts "File was uploaded" 
end 

if __FILE__ == $0 
  db_backup 
end

Крон:
0 4 * * * /home/user/.rvm/gems/ruby-2.2.5/wrappers/ruby /home/user/myapp/db_backup.rb
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
2ord
@2ord
Попробовать так:
* * * * * cd $HOME && $HOME/.rvm/gems/ruby-2.2.5/wrappers/ruby $HOME/myapp/db_backup.rb

А лучше добавить к шапку скрипта
#!/home/user/.rvm/gems/ruby-2.2.5/wrappers/ruby
и добавить права на запуск

А в crontab
* * * * * cd $HOME && $HOME/myapp/db_backup.rb
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы