Dear all,
I am developing a web harvesting server which requires regularly
website parsing. Since I use Mac 10.8 as my development environment, I
try to use Launchd to routinely wake up my parser. My parser was a bash
script which has only two lines:
cd $HOME/ProjectFolder
bundle exec rake dailyTask:dataParse
When directly execute the script under Terminal, there is no
problem. However, when this script is called by Launchctl, it produces
errors, which looks like:
Dear all,
I am developing a web harvesting server which requires regularly
website parsing. Since I use Mac 10.8 as my development environment, I
try to use Launchd to routinely wake up my parser. My parser was a bash
script which has only two lines:
Dear all,
I am developing a web harvesting server which requires regularly
website parsing. Since I use Mac 10.8 as my development environment, I
try to use Launchd to routinely wake up my parser. My parser was a bash
script which has only two lines:
cd $HOME/ProjectFolder
Just a thought, is $HOME valid when this is run?
Colin
Thanks for reply. I checked the path and it is ok. I test directly with
no variable and the result is identical.
I did some other experiments. In the batch script, I can successfully
run
bundle exec rake --version or bundle exec rake -h
However, when I run bundle exec rake -T, it would produce exact
segmentation error as follows:
crontab-test.sh: line 6: 29245 Abort trap: 6
/usr/local/Cellar/ruby/2.0.0-p195/bin/bundle exec rake -T >>
/tmp/cron-test.out
/usr/local/Cellar/ruby/2.0.0-p195/lib/ruby/gems/2.0.0/gems/mysql2-0.3.13/lib/mysql2/mysql2.bundle:
[BUG] Segmentation fault
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
I don’t understand when bundle exec rake would encounter errors for
mysql2 bundle, especially when it reports ruby 1.8.7 while I am sure I
use 2.0.0p195.
Dear all,
I am developing a web harvesting server which requires regularly
website parsing. Since I use Mac 10.8 as my development environment, I
try to use Launchd to routinely wake up my parser. My parser was a bash
script which has only two lines:
cd $HOME/ProjectFolder
Just a thought, is $HOME valid when this is run?
Colin
Thanks for reply. I checked the path and it is ok. I test directly with
no variable and the result is identical.
I did some other experiments. In the batch script, I can successfully
run
bundle exec rake --version or bundle exec rake -h
However, when I run bundle exec rake -T, it would produce exact
segmentation error as follows:
crontab-test.sh: line 6: 29245 Abort trap: 6
/usr/local/Cellar/ruby/2.0.0-p195/bin/bundle exec rake -T >>
/tmp/cron-test.out
/usr/local/Cellar/ruby/2.0.0-p195/lib/ruby/gems/2.0.0/gems/mysql2-0.3.13/lib/mysql2/mysql2.bundle:
[BUG] Segmentation fault
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]
I don’t understand why bundle exec rake would encounter errors for
mysql2 bundle, especially when it reports ruby 1.8.7 while I am sure I
use 2.0.0p195. Does it imply when launchd exec the bash script, it has
its own environment which uses ruby 1.8.7?
Using launchd is much like using cron on linux: there is no (or barely
any) predefined environment like you have in Terminal. Thus you have to
provide all the information that will be needed to make sure your script
runs correctly. This is includes running whatever is needed to set the
right version and source of ruby for that launcher.
Since OS/X ships with 1.8.7 as the system ruby, that is the one used by
launchd. If you require a different version (and you do if you want to
use any gems you’ve installed for that different version), you have to
wrap your ruby script in something that will initialize the environment.
I haven’t tried this, but it might just be enough to add init-file
/Users/youruser/.bash_profile to the argument list above, depending on
how you have things configured.
Thanks! I think this is the right direction and I am gonna give it a
try. I just test adding ruby path to both /etc/launchd.conf and
/etc/paths. After rebooting, I thought it would work but not. Launchd
still does not recognize the correct ruby version. I will report once it
works.
Hope someone can give me the right direction to continue. Many
thanks!
Using launchd is much like using cron on linux: there is no (or barely
any) predefined environment like you have in Terminal. Thus you have to
provide all the information that will be needed to make sure your script
runs correctly. This is includes running whatever is needed to set the
right version and source of ruby for that launcher.
Since OS/X ships with 1.8.7 as the system ruby, that is the one used by
launchd. If you require a different version (and you do if you want to
use any gems you’ve installed for that different version), you have to
wrap your ruby script in something that will initialize the environment.
I haven’t tried this, but it might just be enough to add init-file
/Users/youruser/.bash_profile to the argument list above, depending on
how you have things configured.
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.