Cron job aanmaken voor Ruby omgeving

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • ddkiller0900
  • Registratie: Juli 2001
  • Laatst online: 29-09 07:19
Op mijn server draai ik de applicatie Redmine.

Nu wil ik ervoor zorgen dat automatisch een issue wordt aangemaakt onder een project wanneer mail word verzonden naar een bepaald e-mail adres.

Dit is mogelijk door onderstaand commando uit te voeren vanaf de terminal:

rake -f /var/www/redmine/Rakefile redmine:email:receive_imap RAILS_ENV="production" host=mijn.server.com username=support@server.com password=password move_on_success=Inbox allow_override=priority

Uiteraard wil je het checken van de mail automatiseren met een cron job, alleen lijkt dit niet helemaal goed te gaan. Zelf denk ik dat het te maken heeft met de environment settings.

Eerst heb ik geprobeerd om een standaard cron job aan te maken wat helaas niet werkte.
Vervolgens heb ik gekeken op de website van RVM.
De uitleg op deze website lijkt helaas ook niet te werken voor mij.

Om toch een cron job te hebben met de benodigde path settings heb ik het volgende gedaan met behulp van instructies:

code:
1
2
3
rvm use 2.2
rvm cron setup
crontab -e


Vervolgens mijn cron job toegevoegd waarna onderstaande configuratie ontstaat.

Script:
code:
1
2
3
4
#!/bin/bash
source /usr/local/rvm/gems/ruby-2.2.1@global/environment

rake -f /var/www/redmine/Rakefile redmine:email:receive_imap RAILS_ENV="production" host=mijn.server.com username=support@server.com password=password move_on_success=Inbox allow_override=priority


crontab -e:
code:
1
2
3
4
5
6
7
8
9
10
11
#sm start rvm
PATH="/usr/local/rvm/gems/ruby-2.2.1/bin:/usr/local/rvm/gems/ruby-2.2.1@global/bin:/usr/local/rvm/rubies/ruby-2.2.1/bin:/usr/local/rvm/gems/ruby-2.2.1/bin:/usr/local/rvm/gems/ruby-2.2.1@global/bin:/usr/local/rvm/rubies/ruby-2.2.1/bin:/usr/local/rvm/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/gebruiker/.local/bin:/home/gebruiker/bin"
GEM_HOME='/usr/local/rvm/gems/ruby-2.2.1'
GEM_PATH='/usr/local/rvm/gems/ruby-2.2.1:/usr/local/rvm/gems/ruby-2.2.1@global'
MY_RUBY_HOME='/usr/local/rvm/rubies/ruby-2.2.1'
IRBRC='/usr/local/rvm/rubies/ruby-2.2.1/.irbrc'
RUBY_VERSION='ruby-2.2.1'
#sm end rvm


*/1 * * * * root /var/www/redmine/script/check_mail.sh


Kan iemand wat advies geven?
Ik ben niet zo bekend met ruby en cron jobs.
Dat de cron job om de minuut draait is even voor testdoeleinden.

Alle reacties


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 19:28

Hero of Time

Moderator LNX

There is only one Legend

Tja, al je variabelen moet je gewoon in je shell script dumpen. Nu zijn ze niet bekend bij 't rake commando. Sowieso is het gebruik zoals jij nu doet van crontab een bad practise. Je misbruikt 't nu als een shell script en roept dan nog een shell script los aan. Niet de meest handige oplossing, of wel? ;)

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • ddkiller0900
  • Registratie: Juli 2001
  • Laatst online: 29-09 07:19
Je hebt gelijk dat je dit normaal niet zo hoort aan te pakken.
Alleen doet hij die config automatisch toevoegen in crontab wanneer ik rvm cron setup uitvoer.
Ik heb crontab opgeruimd en de variabelen in het script opgenomen.
Helaas nog geen succes.

Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 19:28

Hero of Time

Moderator LNX

There is only one Legend

Zet dan 'export' voor de vars. Of vergelijk gewoon je vars op de shell met die van cron.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • ddkiller0900
  • Registratie: Juli 2001
  • Laatst online: 29-09 07:19
Na wat testen heb ik de oplossing gevonden:

/etc/cron.d/check_mail

code:
1
*/5 * * * * thin /var/www/redmine/script/check_mail.sh


/var/www/redmine/script/check_mail.sh

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
*/1 * * * * thin /var/www/redmine/script/check_mail.sh
[root@localhost cron.d]# cat /var/www/redmine/script/check_mail.sh
#!/bin/bash
#sm start rvm
export PATH="/usr/local/rvm/gems/ruby-2.2.1/bin:/usr/local/rvm/gems/ruby-2.2.1@global/bin:/usr/local/rvm/rubies/ruby-2.2.1/bin:/usr/local/rvm/gems/ruby-2.2.1/bin:/usr/local/rvm/gems/ruby-2.2.1@global/bin:/usr/local/rvm/rubies/ruby-2.2.1/bin:/usr/local/rvm/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/nvlachakis/.local/bin:/home/nvlachakis/bin:/var/www/redmine/script"
export GEM_HOME='/usr/local/rvm/gems/ruby-2.2.1'
export GEM_PATH='/usr/local/rvm/gems/ruby-2.2.1:/usr/local/rvm/gems/ruby-2.2.1@global'
export MY_RUBY_HOME='/usr/local/rvm/rubies/ruby-2.2.1'
export IRBRC='/usr/local/rvm/rubies/ruby-2.2.1/.irbrc'
export RUBY_VERSION='ruby-2.2.1'
#sm end rvm

rake -f /var/www/redmine/Rakefile redmine:email:receive_imap RAILS_ENV="production" host=mijn.server.com username=support@server.com password=password move_on_success=Inbox allow_override=priority


Zoals Hero of Time al had aangegeven is het niet nodig om SHELL en PATH variabelen in te stellen in je cron job. Om de één of andere reden heb ik daarstraks verkeerd gekeken.

Ik hoop dat iemand wat aan deze informatie heeft :)

@ Hero of Time, kan je deze post als 'Beste antwoord' markeren?

[ Voor 10% gewijzigd door ddkiller0900 op 15-01-2016 15:34 . Reden: Verkeerd gekeken, configs aangepast ]


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 19:28

Hero of Time

Moderator LNX

There is only one Legend

Het is niet zozeer je shell die problemen geeft. Het zijn de enviromental variabelen die beschikbaar komen. Standaard draait cron met een sh shell. Die sourcet niets van de bestanden die je zou gebruiken als je bash gebruikt.

Ik heb nog nooit een probleem gehad met de shell die cron gebruikt, alleen bepaalde variabelen die er niet waren en even apart moest noemen.
Laat maar eens een 'env > cron.vars' draaien vanuit cron en vergelijk dat met de uitvoer die je in je terminal krijgt. Dan zie je wat ik bedoel en ook wat je mist. Het maakt namelijk niet uit welke shell je gebruikt, of het nou sh, dash, bash, ksh, csh, zsh, funkysh of wat dan ook gebruikt om een programma mee te starten. In dit geval dus rake/ruby. Het gaat allemaal om de variabelen.

Commandline FTW | Tweakt met mate

Pagina: 1