2009-10-21 7 views
6

würde Ich mag Cron Aufgaben in meinem Capistrano Bereitstellungsdateien enthalten stattdessen den folgenden Befehl verwenden manuell die crontab-Datei zu bearbeiten:Erstellen crontab über Capistrano statt mit crontab -e

crontab -e [username] 

Gibt es ein Skript I könnte innerhalb des Capistrano run-Befehls verwenden, um den Inhalt der Crontab zu setzen?

Antwort

5

auf meiner Linux-Box

crontab -u userName -l > fileName 

listet die crontab-Datei für Benutzer-Namen in filename.

Dann würde ich ein Ruby (oder eine andere Sprache) Skript verwenden, um die Datei zu aktualisieren.

Schließlich würde ich

crontab -u userName fileName 

verwenden, um die crontab für Benutzer-Name

+0

Dank sind mit dieser Lösung für die Buchung. Ich denke, ich werde es versuchen. – tdewell

15

Schauen Sie sich die Whenever Juwel aktualisieren - dies über Streckung können, was Sie tun zu wollen, aber es nutzt sehr einfach (Ruby) -Syntax und macht es einfach möglich, Cron-Jobs innerhalb eines capistrano-Deployment-Skripts einzurichten.

+0

Danke. Das ist ein gut aussehender Edelstein. – tdewell

+0

Es ist fantastisch - ich verwende es in der Produktion für mehrere App-Implementierungen. – bensie

+0

Nachdem ich diese Antwort gelesen hatte, beschloss ich, dies für mein eigenes Projekt zu versuchen. Funktioniert super! Ryan Bates stellte eine Railscast-Episode zusammen, in der er verwendet: Wann immer: http://railscasts.com/episodes/164-cron-in-ruby –

0

Warum nicht eine Crontab einschließen, die in /etc/cron.d installiert werden kann?

+0

Warum wird das abgelehnt? – matheeeny

4

gegeben, dass Sie eine Variable gesetzt haben, das ist: new_user

und dass Sie use_sudo true

desc "install crontab" 
task :install_crontab do 
    run "echo '0 23 * * * /home/#{new_user}/scripts/backup_#{new_user}.sh' | #{sudo} crontab -u #{new_user} -" 
end 
+0

großartig! Danke vielmals! –

4
def crontab_add(line) 
    config = capture(%Q{crontab -l}).split "\n" 
    return if config.include? line 
    run %Q{(crontab -l; echo "#{line}") | crontab -} 
end