Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
894
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Почему моя работа Cron не работает должным образом?
У меня есть работа cron на Ubuntu Hardy VPS, которая работает только наполовину, и я не могу понять, почему. Задание представляет собой сценарий Ruby, который использует mysqldump для резервного копирования базы данных MySQL, используемой приложением Rails, которая затем gzipped и загружается на удаленный сервер с помощью SFTP.
Файл gzip создается и копируется успешно, но это всегда нулевые байты. Тем не менее, если я запускаю команду cron непосредственно из командной строки, Она отлично работает.
Это задание cron:
PATH=/usr/bin
10 3 * * * ruby /home/deploy/bin/datadump.rb
Это datadump.rb:
#!/usr/bin/ruby
require 'yaml'
require 'logger'
require 'rubygems'
require 'net/ssh'
require 'net/sftp'
APP = '/home/deploy/apps/myapp/current'
LOGFILE = '/home/deploy/log/data.log'
TIMESTAMP = '%Y%m%d-%H%M'
TABLES = 'table1 table2'
log = Logger.new(LOGFILE, 5, 10 * 1024)
dump = "myapp-#{Time.now.strftime(TIMESTAMP)}.sql.gz"
ftpconfig = YAML::load(open('/home/deploy/apps/myapp/shared/config/sftp.yml'))
config = YAML::load(open(APP + '/config/database.yml'))['production']
cmd = "mysqldump -u #{config['username']} -p#{config['password']} -h #{config['host']} --add-drop-table --add-locks --extended-insert --lock-tables #{config['database']} #{TABLES} | gzip -cf9 > #{dump}"
log.info 'Getting ready to create a backup'
`#{cmd}`
# Strongspace
log.info 'Backup created, starting the transfer to Strongspace'
Net::SSH.start(ftpconfig['strongspace']['host'], ftpconfig['strongspace']['username'], ftpconfig['strongspace']['password']) do |ssh|
ssh.sftp.connect do |sftp|
sftp.open_handle("#{ftpconfig['strongspace']['dir']}/#{dump}", 'w') do |handle|
sftp.write(handle, open("#{dump}").read)
end
end
end
log.info 'Finished transferring backup to Strongspace'
log.info 'Removing local file'
cmd = "rm -f #{dump}"
log.debug "Executing: #{cmd}"
`#{cmd}`
log.info 'Local file removed'
Я проверил и перепроверил все пути, и они верны. Как sftp.yml (учетные данные SFTP), так и database.yml (учетные данные MySQL) принадлежат исполняющему пользователю (deploy) с разрешениями только на чтение для этого пользователя (chmod 400). Я использую 1.1.x версии net-ssh и net-sftp. Я знаю, что они не самые последние, но это то, с чем я знаком в данный момент.
Что может быть причиной сбоя задания cron?
Когда сценарии выполняются правильно в интерактивном режиме, но не при запуске с помощью cron, проблема обычно возникает из-за существующих параметров среды... например, PATH как alrady упоминается @Ted Персивалем, но могут быть и другие переменные окружения.
Это происходит потому, что cron не будет вызывать .bash_profile, .bashrc или /etc/profile перед выполнением.
Лучший способ избежать этого-убедиться, что все сценарии, вызываемые cron, не делают никаких предположений о среде при выполнении. В дальнейшем это может быть так же просто, как включить несколько строк в сценарий, чтобы убедиться, что среда настроена правильно. Например, в моем случае у меня есть все важные настройки в /etc/profile (для RHEL), поэтому я включу следующую строку в любые сценарии, которые будут выполняться под cron:
source /etc/profile
Вы уверены, что временный файл создается правильно при выполнении задания cron? Рабочий каталог для вашего скрипта будет указан либо в переменной среды HOME, либо в записи /etc/passwd для пользователя, установившего задание cron. Если deploy не имеет разрешений на запись для каталога, в котором он выполняется, то можно указать абсолютный путь для файла дампа, чтобы устранить проблему.