[chef] Re: Re: Re: Re: Re: Re: Trying to start/stop tomcat from my own cookbook


Chronological Thread 
  • From: Mark Pimentel < >
  • To:
  • Subject: [chef] Re: Re: Re: Re: Re: Re: Trying to start/stop tomcat from my own cookbook
  • Date: Sun, 12 May 2013 11:55:46 -0400

Have you considered wrapping the tomcat install with the java wrapper (tanukisoftware.com). This scenario you describe is the exact reason I use it.  It sets up an environment for you then launches the jvm according to all the params you define in it's config.  This simplifies the chef part of the equation and makes the whole java invocation part less hairy while providing you a consistent pattern to the configuration of java applications.

On 2013-05-12 11:33 AM, "Chandan Maheshwari" < "> > wrote:
Hi Sascha,

Thanks for the great elaboration, but I still needs some clarification, So Sorry for this.

The execute block will start your process as that user, but I'm not positive that it will source the user environment files.  You are much better off putting the JAVA_HOME, etc into your custom script. 

               I have exported JAVA_HOME, etc in the script I am running. (where I am extracting war and then starting the tomcat). Is this what you asked me to do.


If you are going to make your script the authority, don't depend on Chef to do half the work, but ensure your script sources the files you need or contains the environment variables it requires
OR
You might consider reconstructing your script into a chef recipe/def that will 1) download a remote file, 2) stop the tomcat app 3) deploy the file 4) start the tomcat app
                       
                   That is exactly what I need and am doing the same, through my default recipe I am running a script.sh(which I have downloaded from remote location) Inside this script basically I am extracting the war and then starting the tomcat, I have also exported the variables in this script. Here is the snippet:

execute "redeploy_apps" do
    cwd "#{extract_path_scripts}"
    user "ubuntu"
#environment 'JAVA_HOME' => "#{extract_path_java}/jdk1.6.0_45"
    command "sh #{extract_path_scripts}/#{redeploy_apps_script}"
  end

NOTE I tried with root user also.

In the redeploy_apps_script I have :

export JAVA_HOME=/home/ubuntu/jdk1.6.0_45
sudo /home/ubuntu/scripts/apps_stop.sh > /home/ubuntu/scripts/stop.txt
echo "Stopping APP Please Wait"
sleep 30
rm -rf /home/ubuntu/tomcat/logs/*
rm -rf /home/ubuntu/tomcat/work/*

rm -rf /home/ubuntu/tomcat/webapps/apps
mkdir  /home/ubuntu/tomcat/webapps/apps

rm -rf /home/ubuntu/tomcat/webapps/static
mkdir  /home/ubuntu/tomcat/webapps/static

cd /home/ubuntu/tomcat/webapps/apps
echo "Extracting War"
/home/ubuntu/jdk1.6.0_45/bin/jar -xf /home/ubuntu/war/apps.war

cd /home/ubuntu/tomcat/webapps/static
/home/ubuntu/jdk1.6.0_45/bin/jar -xf /home/ubuntu/war/apps.war

sudo /home/ubuntu/scripts/apps_start.sh > /home/ubuntu/scripts/start.sh



Except the lines in bold everything works.

You might consider reconstructing your script into a chef recipe/def that will 1) download a remote file, 2) stop the tomcat app 3)
deploy the file 4) start the tomcat app

                Would appreciate a lot if you can help me in this.

Here is an example of the pattern I'm talking about:  https://gist.github.com/sbates/5563535

                       As I dont have that much experience so may be I don't find where and how the service will start from this. [Just to make a note here I an not downloading/installing tomcat using the community "tomcat cookbook". In my recipe I am downloading the tar of tomcat and extracting it.

Sorry If the above queries are too basic, please bare it.


On Sun, May 12, 2013 at 7:15 PM, Sascha Bates < " target="_blank"> > wrote:
The execute block will start your process as that user, but I'm not positive that it will source the user environment files.  You are much better off putting the JAVA_HOME, etc into your custom script. 

I'd put it like this:

If you are going to make your script the authority, don't depend on Chef to do half the work, but ensure your script sources the files you need or contains the environment variables it requires
OR
You might consider reconstructing your script into a chef recipe/def that will 1) download a remote file, 2) stop the tomcat app 3) deploy the file 4) start the tomcat app

In this fashion, you can set up tomcat as a service and trigger service start stops from Chef.

Many of us in the community have wrestled with Java apps and would be happy to help you refactor your recipe into something that takes better advantage of Chef's primitives.

tl;dr discussion about tomcat deploy strategies:
---------------------------
Here is an example of the pattern I'm talking about:  https://gist.github.com/sbates/5563535
This is a link to a definition I threw together for deploying Tomcat apps in a dev env from Artifactory.  Note that this is not a production-ready pattern. It just runs, notices if there's a new war to deploy and then stops the service, deletes the old war, and notifies the "deploy" to run which basically copies in the new war and restarts the service.

The important part of this to look at is notifications to stop, delete and deploy.  That pattern is really what you're looking to manage with Chef or your deploy script.

You can also manage your war file manipulations with tools like Bryan Berry's Ark resource (http://community.opscode.com/cookbooks/ark) or the Riot Games Artifact cookbook (https://github.com/RiotGames/artifact-cookbook) if you have complex needs.   I can also elaborate on why I wrote some separate code instead of re-using community code in a separate email if anyone wants.

Bryan has also written a library for managing JVM Args: https://github.com/bryanwb/jvmargs

I hope some of this helps and doesn't further confuse.

Sascha


Morgan Blackthorne wrote:
I would log in as the user and check to make sure that those values are set. Also, if it's in .bashrc and startup.sh is using /bin/sh, then they likely won't get loaded-- you might need to move it to something like .profile (I forget exactly what startup file(s) sh loads but I believe .bashrc / .bash_profile isn't included).

--
~*~ StormeRider ~*~

"Every world needs its heroes [...] They inspire us to be better than we are. And they protect from the darkness that's just around the corner."

(from Smallville Season 6x1: "Zod")

On why I hate the phrase "that's so lame"... http://bit.ly/Ps3uSS


On Sun, May 12, 2013 at 4:43 AM, Chandan Maheshwari < " target="_blank"> > wrote:
Thanks Morgan,

I am afraid, but it doesn't give any error. The chef-client runs successfully and creates node and client onto my chef-server. Any other location where I can check logs after logging into the newly created instance.

Also there are no logs for tomcat also.

I did some troubleshooting initially to redirect output of command ..../tomcat/bin/startup.sh in a .txt file and saw that it says:
"Neither JAVA_HOME nor JRE_HOME is set, need at least one to set" But now I am setting those in ~/.bashrc file also.

Can you guide me what other trouble shooting I can do.


On Sun, May 12, 2013 at 5:00 PM, Morgan Blackthorne < " target="_blank"> > wrote:
Specifying what error it runs I to will probably help folks help you. It's standard troubleshooting question number one: what happens when you try?


On Sunday, May 12, 2013, Chandan Maheshwari wrote:
To be more specific, here is what all I have tried:

I have my cookbook: where in my recipe, I am downloading tomcat.tar (this I have placed somewhere in my other machine). After downloading I extract the same tomcat.tar (suppose in location /home/ubuntu/tomcat). Now I am simply trying to start tomcat. I tried the below mentioned ways, but is not able to start/stop.

1) Modified the ~/.bashrc file from my recipe to export JAVA_HOME, CATALINA_HOME,
What I did is:

In a recipe inside bash script simply added the environment variables at the end of ~/.bashrc and then ran source ~/.bashrc [ this works I can verify from ~/.bashrc file)

Now using "execute" resource, ran "/home/ubuntu/tomcat/bin/startup.sh"  BUT IT DO NOT START.

2) Modified the ~/.bashrc file from my recipe to export JAVA_HOME, CATALINA_HOME,
What I did is:

ran a bash script inside recipe to simply add the environment variables at the end of ~/.bashrc and then ran source ~/.bashrc

Inside bash script resource, ran "/home/ubuntu/tomcat/bin/startup.sh"  BUT IT DO NOT START.

3) Wrote a shell script and kept at the same location from where I am downloading tomcat.tar, downloaded the run_tomcat.sh on to the chef-client (using resource remote_file) and then using the "execute" resource running the run_tomcat.sh.
Inside this run_tomcat.sh, I am exporting the environment variables and then running the "/home/ubuntu/tomcat/bin/startup.sh"
BUT IT DO NOT START.

4) Wrote a shell script and kept at the same location from where I am downloading tomcat.tar, downloaded the run_tomcat.sh on to the chef-client (using resource remote_file). Set environment variables using "environment resource" and run script using "execute" resource.
Inside this run_tomcat.sh, running the "/home/ubuntu/tomcat/bin/startup.sh"
BUT IT DO NOT START.


For point 3 and 4 above the strange thing is that other commands inside run_tomcat.sh, like extracting war, deleting some directory from the extracted war executes. BUT TOMCAT DOESN'T START UP.

I tried couple of other things also, but is not able to start or stop the tomcat.

On Fri, May 10, 2013 at 11:00 PM, Chandan Maheshwari < > wrote:

Hi All,

This may be a stupid or a silly question. But I am finding issues in getting it done.

Basically I have wrote a cookbook, where I am simply downloading a tar file of tomcat with other stuff related to my app from some location.

Then I am using some resources to untar it to define a specific folder structure onto my new instance created using knife ec2 plugin. (to be specific ubuntu)

Now I have one shell script which basically stops the tomcat, extracts my application war in particular location, removes some unwanted files from the extracted war and then starts the tomcat back.

I am executing this script using "execute" and in command passing the full path of the script. The script does everything (extracts my application war in particular location, removes some unwanted files from the extracted war), but it do not stops the tomcat and then starts it back.

The chef-client runs successfully.

Now when I login to the newly created instance, I can't see any tomcat logs. Moreover when I run the shell script manually (which I ran with cookbook also), it does everything and I can hit the URL to access my app.

Any help is greatly appreciated.

I don't want to use the existing tomcat cookbook, as I want to try it from my location(where I have kept the tomcat.tar) also I want to use tomcat7.

--
Thanks and Regards,
Chandan



--
Regards,
Chandan


--
--
~*~ StormeRider ~*~

"Every world needs its heroes [...] They inspire us to be better than we are. And they protect from the darkness that's just around the corner."

(from Smallville Season 6x1: "Zod")

On why I hate the phrase "that's so lame"... http://bit.ly/Ps3uSS




--
Regards,
Chandan




--
Regards,
Chandan



Archive powered by MHonArc 2.6.16.

§