が記載されていないのはなぜ私のCronジョブは正しく動作?
-
08-06-2019 - |
質問
いcronジョブは、UbuntuハーディVPSが半分の作品やまだひさしをはじめとする事はいかがでしょうか。ジョブはRubyスクリプトを使用するmysqldumpをバックアップのMySQLデータベースの使用によるレールアプリケーションは、そのgzipped、アップロードされたリモートサーバーを使用SFTP.
は、gzipファイルがコピーされたものでは常にゼロバイトまでとなります。いまのdコマンドから直接コマンドラインで動作します。
この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資格) データベースです。yml (MySQL資格)を所有し、実行中のユーザー(展開)との読み取り権限とユーザー chmod400).私が使っているの1.1.xバージョンのネssh純-sftp.知っていないのがいいので馴染みのようです。
何が原因のcronジョブが?
解決
まずは、一時ファイルを作成していると正しく実行する場合としてのcronジョブ?の作業ディレクトリのためのスクリプトには指定されたホーム環境変数、または、/etc/passwdの参入のためのユーザーが設置され、cronます。合を展開しない書き込みアクセス権のためのディレクトリで実行されるごとに、その指定は絶対パスをダンプファイルの問題です。
他のヒント
時スクリプト実行を正しく対話的に作成してくださいdの問題は通常の環境設定から環境設定の場所---例えば、パスとしてalrady先@Ted Percivalされますが、その他の環境変数です。
このcronない呼び出し.bash_profile,.bashrcまたは/etc/プロフィールを実行する前に、.
最良の方法のため確保任意のスクリプトによって呼び出されるのか記憶にない想の環境。以上おっさん☆たまごちょっとだけの簡単などを含む行をスクリプトかどうかを確認するために環境を設定。例えば、私の場合はすべての重要な設定を/etc/profile(RHEL)とがあるかどうか分かりませんが、インストール当スクリプト実行される下cron:
source /etc/profile
うお PATH
足数ディレクトリ、そして何よりも /bin
( /bin/rm
).ここでは、"システムの /etc/crontab
への応用が期待されています。
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
はcronメールを送信するとログ?
ない場合は、パイプの出力cronへのログファイルです。
このcpu STDERR off.............