Simplest Enterprise Continuous Integration Solutions

Sunday, December 18, 2011

JIRA: duplicate JIRA database


# JIRA's XML backup utility to backup JIRA database in XML format

Administrator -> System -> Import & Export -> Backup System

# create a new latin1 database on a new database server to house JIRA's data

[root@linux64-jira-server ~]# mysql -u root -h linux64-jira-server
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.5.25-community MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE DATABASE latin1jiradb CHARACTER SET 'latin1';
Query OK, 1 row affected (0.00 sec)
mysql> CREATE USER 'latin1jira'@'linux64-jira-server' IDENTIFIED BY '********';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'latin1jira'@'linux64-jira-server';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
[root@linux64-jira-server ~]# mysql --user=latin1jira --password=******** --database=latin1jiradb --host=linux64-jira-server

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.5.25-community MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> exit
Bye

# shutdown JIRA server

[root@linux64-jira-server ~]# service jira stop

# make a backup of JIRA HOME Directory (/var/atlassian/application-data/jira)

[root@linux64-jira-server jira]# cp -prf /var/atlassian/application-data/jira /var/atlassian/application-data/jira_backup

# remove previous dbconfig.xml from JIRA HOME Directory

[root@linux64-jira-server jira]# rm -f /var/atlassian/application-data/jira/dbconfig.xml

# restart JIRA server

[root@linux64-jira-server jira]# service jira start

# restart JIRA with JIRA Setup Wizard for configuring database connection





































# click "import your existing data" link and restore you data from the XML backup created previously








Saturday, December 17, 2011

JIRA: JIRA 4.4.4 on Red Hat 5

Install JIRA 4.4.4 (32bit) on Red Hat 5

# install MySQL Community Server 5.5 x86 64bit RPMs on Red Hat 5 server

rpm -Uvh /tmp/MySQL-shared-compat-5.5.25-1.rhel5.x86_64.rpm
rpm -Uvh /tmp/MySQL-server-community-5.5.25-1.rhel5.x86_64.rpm
rpm -Uvh /tmp/MySQL-client-community-5.5.25-1.rhel5.x86_64.rpm
/usr/bin/mysqladmin -u root password '********'

# configure MySQL DataBase for JIRA 4.4.4

mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.5.25-community MySQL Community Server (GPL)


Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


mysql> CREATE DATABASE jiradb CHARACTER SET 'utf8';
Query OK, 1 row affected (0.00 sec)


mysql> CREATE USER 'jira'@'linux64-jira-server' IDENTIFIED BY '********';
Query OK, 0 rows affected (0.00 sec)


Mysql> GRANT ALL PRIVILEGES ON *.* TO 'jira'@'linux64-jira-server';
Query OK, 0 rows affected (0.00 sec)


mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)


mysql> QUIT;

# verify jiradb creation

mysql --user=jira --password=******** --database=jiradb --host=linux64-jira-server
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.5.25-community MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> exit
Bye

# install atlassian-jira-4.4.4-x32.bin

./atlassian-jira-4.4.4-x32.bin
Unpacking JRE ...
Starting Installer ...


This will install JIRA 4.4.4 on your computer.
OK [o, Enter], Cancel [c]
o
If JIRA is already installed on this machine, please read the following information carefully.
Please choose between creating a new JIRA installation or upgrading an
existing JIRA installation.
Create a new JIRA installation. [1, Enter], Upgrade an existing JIRA installation. [2]
1


Where should JIRA 4.4.4 be installed?
[/opt/atlassian/jira]


Default location for JIRA data
[/var/atlassian/application-data/jira]


Configure which ports JIRA will use.
JIRA requires two TCP ports that are not being used by any other
applications on this machine. The HTTP port is where you will access JIRA
through your browser. The Control port is used to Startup and Shutdown JIRA.
Use default ports (HTTP: 8080, Control: 8005) - Recommended [1, Enter], Set custom value for HTTP and Control ports [2]
1
JIRA can be run in the background.
You may choose to run JIRA as a service, which means it will start
automatically whenever the computer restarts.
Install JIRA as Service?
Yes [y, Enter], No [n]
y


Extracting files ...




Please wait a few moments while JIRA starts up. Depending on your system this may take a few minutes.
Launching JIRA ...


Setup has finished installing JIRA 4.4.4 on your computer.
JIRA 4.4.4 can be accessed at http://localhost:8080
Finishing installation ...

# configure JIRA through http://linux64-jira-server

# Connect to MySQL

Specify the database connection: External
Database Type: MySQL
Hostname: linux64-jira-server
Port: 3306
Database: jiradb
Username: jira
Password: ********

# License

Application Title: MY JIRA
Mode: Private
Base URL: http://linux64-jira-server:8080
Server ID: ABCD-EFGH-IJKL_MNOP
License Key:

# Administrator Account

Username: admin
Password: ********
Confirm: ********
Full name: JIRA Administrator
Email: jira_admin@linux64.local.lab

# Email Notification

Email Notification: Enable
Name: Default SMTP Server
From address: jira_admin@linux64.local.lab
Email prefix: [JIRA]
Server Type: SMTP Host
Host Name: smtp.linux64.local.lab
Protocol: SMTP

Saturday, November 12, 2011

Enterprise Linux - get /tmp size

#!/bin/sh
# This script uses to get the available /tmp size from /bin/df -h in GB

# Option 1:

# Normal case: use /bin/awk to get the available /tmp size from /bin/df -h
# if [[ `/bin/df -h /tmp | grep tmp` =~ "tmp" ]]; then
#    AVAILABLE_DISKSPACE=`/bin/df -h /tmp | /bin/grep tmp | /bin/awk '{print$4}'`
# else
#    AVAILABLE_DISKSPACE=`/bin/df -h /tmp | /bin/grep ^[[:space:]] | /bin/awk '{print$3}'`
# fi

# Option 2:

# No single quotes allowed case: use /bin/sed to get the available /tmp size from /bin/df -h
if [[ `/bin/df -h /tmp | grep tmp` =~ "tmp" ]]; then
   AVAILABLE_DISKSPACE=`/bin/df -h /tmp | /bin/grep tmp | /bin/sed -e "s/^\S*\s*\S*\s*\S*\s*\(\S*\)\s*\S*\s*\S*$/\1/g"`
else
   AVAILABLE_DISKSPACE=`/bin/df -h /tmp | /bin/grep ^[[:space:]] | /bin/sed -e "s/^\s*\S*\s*\S*\s*\(\S*\)\s*\S*\s*\S*$/\1/g"`
fi
if [[ ${AVAILABLE_DISKSPACE} =~ ".*K$" ]]; then
   TMP_SIZE_IN_GB=${AVAILABLE_DISKSPACE%K}
   TMP_SIZE_IN_GB=(${TMP_SIZE_IN_GB} / 1048576)
elif [[ ${AVAILABLE_DISKSPACE} =~ ".*M$" ]]; then
   TMP_SIZE_IN_GB=${AVAILABLE_DISKSPACE%M}
   TMP_SIZE_IN_GB=(${TMP_SIZE_IN_GB} / 1024)
elif [[ ${AVAILABLE_DISKSPACE} =~ ".*G$" ]]; then
   TMP_SIZE_IN_GB=${AVAILABLE_DISKSPACE%G}
elif [[ ${AVAILABLE_DISKSPACE} =~ ".*T$" ]]; then
   TMP_SIZE_IN_GB=${AVAILABLE_DISKSPACE%T}
   TMP_SIZE_IN_GB=(${TMP_SIZE_IN_GB} * 1024)
fi
echo "Available /tmp disk space (GB): ${TMP_SIZE_IN_GB}"

Saturday, October 8, 2011

MySQL: Community Server x86 64bit RPMs

Scenario:

Install MySQL Community Server 5.5 x86 64bit RPMs on Red Hat 5 server.



#!/bin/sh
TIME_STAMP=`date +%Y-%m-%d_%H_%M_%S`
TMPP_DIR=/tmp
MYSQL_USER=my_user
MYSQL_PASSWORD=my_password
FQDN_HOSTNAME=`hostname -f`


# make sure MySQL Community 5.5 x86 64bit RPMs existence

if [ -e "${TEMP_DIR}/MySQL-shared-5.5.25-1.rhel5.x86_64.rpm" ]; then
   /bin/chmod a+x ${TEMP_DIR}/MySQL-shared-5.5.25-1.rhel5.x86_64.rpm
else
   /bin/echo "${TEMP_DIR}/MySQL-shared-5.5.25-1.rhel5.x86_64.rpm doesn't exist" > "${MY_OUTPUT}"
   exit 1
fi
if [ -e "${TEMP_DIR}/MySQL-client-5.5.25-1.rhel5.x86_64.rpm" ]; then
   /bin/chmod a+x ${TEMP_DIR}/MySQL-client-5.5.25-1.rhel5.x86_64.rpm
else
   /bin/echo "${TEMP_DIR}/MySQL-client-5.5.25-1.rhel5.x86_64.rpm doesn't exist" > "${MY_OUTPUT}"
   exit 1
fi
if [ -e "${TEMP_DIR}/MySQL-server-5.5.25-1.rhel5.x86_64.rpm" ]; then
   /bin/chmod a+x ${TEMP_DIR}/MySQL-server-5.5.25-1.rhel5.x86_64.rpm
else
   /bin/echo "${TEMP_DIR}/MySQL-server-5.5.25-1.rhel5.x86_64.rpm" > "${MY_OUTPUT}"
   exit 1
fi
if [ -e "/var/lib/mysql" ]; then
   /bin/mv /var/lib/mysql /var/lib/mysql_${MY_TIME_STAMP_STRING}
fi
MY_OUTPUT="/tmp/mysql_rpm_install_output"
MY_MYSQL_RPMS="MySQL-shared MySQL-server MySQL-client"
MYSQL=/usr/bin/mysql
for i in `echo ${MY_MYSQL_RPMS}`
do
   /bin/rpm -Uvh --replacepkgs "${TEMP_DIR}/${i}*.rpm" > "${MY_OUTPUT}" 2>&1
   if [ "$?" != "0" ]; then
      /bin/cat "${MY_OUTPUT}"
      exit 1
   fi
done


# create MySQL user

$MYSQL -u root -e "CREATE USER '${MYSQL_USER}'@'${FQDN_HOST_NAME}' IDENTIFIED BY '${ FQDN_HOSTNAME }';" > "${MY_OUTPUT}" 2>&1
if [ "$?" != "0" ]; then
   /bin/cat "${MY_OUTPUT}"
   exit 1
fi


# grant MySQL user

$MYSQL -u root -e "GRANT ALL PRIVILEGES ON *.* TO '$MYSQL_USER'@'${FQDN_HOSTNAME}' IDENTIFIED BY '${MYSQL_PASSWORD}';" > "${MY_OUTPUT}" 2>&1
if [ "$?" != "0" ]; then
   /bin/cat "${MY_OUTPUT}"
   exit 1
fi


# flush privileges

$MYSQL -u root -e "FLUSH PRIVILEGES;"
if [ "$?" != "0" ]; then
   /bin/cat "${MY_OUTPUT}"
   exit 1
fi


# install completed

echo "INSTALLED SUCCESSFULLY"
if [ -e "${MY_OUTPUT}" ]; then
   /bin/rm -f "${MY_OUTPUT}"
fi
exit 0

Saturday, September 10, 2011

Enterprise Linux - add hard drive

Here are the procedures to add a new hard drive for vSphere (VMWare ESXI 4.0.0) virtual machine.
  • vSphere Client -> virtual machine “Summary” tab -> "Edit Setting" -> Virtual Machine Properties panel “Hardware” tab -> click "Add" -> popup a "Add Hardware" panel
  • "Add Hardware" panel -> select "Hard Disk", click "Next" -> select "Create a new virtual disk" (by default), click "Next" -> select "Disk Size" to 8GB, click "Next" -> select "Virtual Device Node SCSI(0:1)" (by default), click "Next" -> click "Finish"
  • click "OK" on "Virtual Machine Properties" panel
  • vSphere Client -> virtual machine “Summary” tab -> "Refresh Storage Usage"
  • reboot virtual machine
[root@linux64 ~]# ls -l /dev/sd*
# set partition
brw-r----- 1 root disk 8,  0 Sep 14  2011 /dev/sda
brw-r----- 1 root disk 8,  1 Sep 14  2011 /dev/sda1
brw-r----- 1 root disk 8,  2 Sep 14  2011 /dev/sda2
brw-r----- 1 root disk 8, 16 Sep 14  2011 /dev/sdb
[root@linux64 ~]# df -h
Filesystem                      Size Used Avail Use%  Mounted on
/dev/mapper/VolGroup00-LogVol00 33G  3.4G 28G   11%   /
/dev/sda1                       99M  22M  73M   23%   /boot
tmpfs                           4.0G 0    4.0G  0%    /dev/shm
[root@linux64 ~]# fdisk /dev/sdb
Command (m for help): p
Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1044, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-1044, default 1044): 1044
Command (m for help): p
Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
   Device Boot      Start         End      Blocks   Id  System
   /dev/sdb1        1             1044     8385898+ 83  Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@linux64 ~]# ls -l /dev/sd*
brw-r----- 1 root disk 8,  0 Sep 14  2011 /dev/sda
brw-r----- 1 root disk 8,  1 Sep 14  2011 /dev/sda1
brw-r----- 1 root disk 8,  2 Sep 14  2011 /dev/sda2
brw-r----- 1 root disk 8, 16 Apr 16 18:19 /dev/sdb
brw-r----- 1 root disk 8, 17 Apr 16 18:19 /dev/sdb1
# format new drive
[root@linux64 ~]# mkfs -t ext3 /dev/sdb1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1048576 inodes, 2096474 blocks
104823 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
# mount new drive
[root@linux64 ~]# mkdir /mnt1
[root@linux64 ~]# cat /etc/fstab
/dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1
LABEL=/boot              /boot                   ext3    defaults        1 2
tmpfs                    /dev/shm                tmpfs   defaults        0 0
devpts                   /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                    /sys                    sysfs   defaults        0 0
proc                     /proc                   proc    defaults        0 0
/dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0
/dev/sdb1                /mnt1                   ext3    defaults        1 2
[root@linux64 ~]# mount /dev/sdb1
[root@linux64 ~]# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/sdb1 on /mnt1 type ext3 (rw)
[root@linux64 ~]# df -h
Filesystem                      Size Used Avail Use%  Mounted on 33G  3.4G 28G   11%   /
/dev/mapper/VolGroup00-LogVol00
/dev/sda1                       99M  22M  73M   23%   /boot
tmpfs                           4.0G 0    4.0G  0%    /dev/shm
/dev/sdb1                       7.9G 147M 7.4G  2%    /mnt1

Saturday, September 3, 2011

Java MultiThreads on Linux


Java MultiThreads wrapped as a Linux (x86-64) Daemon with below directory structure:
MultiThreads-linux-x86-64/
                         /conf/
                              /wrapper.conf
                         /lib
                             /commons-io-2.0.1.jar
                             /libwrapper.so
                             /wrapperdemo.jar
                             /wrapper.jar
                             /wrappertest.jar
                             /yamlbeans-1.0.jar
                         /logs
                         /MultiThreads.jar
                         /MultiThreads.sh
                         /receiveInputsFromYamls/
                         /invokeMultiThreadExecutions/
                         /wrapper


MultiThreads.jar which listens yaml format file as inputs from  MultiThreads-linux-x86-64/receiveInputsFromYamls, and execute the executions with outputs to MultiThreads-linux-x86-64/invokeMultiThreadExecutions/ in Java multithreads mode.


yaml format file inputs content:
name: task1
command: execute_something


MultiThreads-linux-x86-64/conf/wrapper.conf content:
#encoding=UTF-8
# Configuration files must begin with a line specifying the encoding
#  of the the file.


#********************************************************************
# Wrapper License Properties (Ignored by Community Edition)
#********************************************************************
# Professional and Standard Editions of the Wrapper require a valid
#  License Key to start.  Licenses can be purchased or a trial license
#  requested on the following pages:
# http://wrapper.tanukisoftware.com/purchase
# http://wrapper.tanukisoftware.com/trial


# Include file problems can be debugged by removing the first '#'
#  from the following line:
##include.debug


# The Wrapper will look for either of the following optional files for a
#  valid License Key.  License Key properties can optionally be included
#  directly in this configuration file.
#include ../conf/wrapper-license.conf
#include ../conf/wrapper-license-%WRAPPER_HOST_NAME%.conf


# The following property will output information about which License Key(s)
#  are being found, and can aid in resolving any licensing problems.
#wrapper.license.debug=TRUE


#********************************************************************
# Wrapper Localization
#********************************************************************
# Specify the locale which the Wrapper should use.  By default the system
#  locale is used.
#wrapper.lang=en_US # en_US or ja_JP


# Specify the location of the Wrapper's language resources.  If these are
#  missing, the Wrapper will default to the en_US locale.
wrapper.lang.folder=../lang


#********************************************************************
# Wrapper Java Properties
#********************************************************************
# Java Application
#  Locate the java binary on the system PATH:
#wrapper.java.command=java
#  Specify a specific java binary:
set.JAVA_HOME=/usr/java/jdk1.6.0_23
wrapper.java.command=%JAVA_HOME%/bin/java


# Tell the Wrapper to log the full generated Java command line.
wrapper.java.command.loglevel=INFO


# Java Main class.  This class must implement the WrapperListener interface
#  or guarantee that the WrapperManager class is initialized.  Helper
#  classes are provided to do this for you.  See the Integration section
#  of the documentation for details.
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp


# Java Classpath (include wrapper.jar)  Add class path elements as
#  needed starting from 1
wrapper.java.classpath.1=lib/wrapper.jar
wrapper.java.classpath.2=MultiThreads.jar


# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=lib


# Java Bits.  On applicable platforms, tells the JVM to run in 32 or 64-bit mode.
wrapper.java.additional.auto_bits=TRUE


# Java Additional Parameters
wrapper.java.additional.1=


# Initial Java Heap Size (in MB)
wrapper.java.initmemory=128


# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=512


# Application parameters.  Add parameters as needed starting from 1
wrapper.app.parameter.1=com.acme.multithreads.MultiTheads


#********************************************************************
# Wrapper Logging Properties
#********************************************************************
# Enables Debug output from the Wrapper.
# wrapper.debug=TRUE


# Format of output for the console.  (See docs for formats)
wrapper.console.format=PM


# Log Level for console output.  (See docs for log levels)
wrapper.console.loglevel=INFO


# Log file to use for wrapper output logging.
wrapper.logfile=logs/wrapper.log


# Format of output for the log file.  (See docs for formats)
wrapper.logfile.format=LPTM


# Log Level for log file output.  (See docs for log levels)
wrapper.logfile.loglevel=INFO


# Maximum size that the log file will be allowed to grow to before
#  the log is rolled. Size is specified in bytes.  The default value
#  of 0, disables log rolling.  May abbreviate with the 'k' (kb) or
#  'm' (mb) suffix.  For example: 10m = 10 megabytes.
wrapper.logfile.maxsize=0


# Maximum number of rolled log files which will be allowed before old
#  files are deleted.  The default value of 0 implies no limit.
wrapper.logfile.maxfiles=0


# Log Level for sys/event log output.  (See docs for log levels)
wrapper.syslog.loglevel=NONE


#********************************************************************
# Wrapper General Properties
#********************************************************************
# Allow for the use of non-contiguous numbered properties
wrapper.ignore_sequence_gaps=TRUE


# Title to use when running as a console
wrapper.console.title=MultiThreads


#********************************************************************
# Wrapper JVM Checks
#********************************************************************
# Detect DeadLocked Threads in the JVM. (Requires Standard Edition)
wrapper.check.deadlock=TRUE
wrapper.check.deadlock.interval=60
wrapper.check.deadlock.action=RESTART
wrapper.check.deadlock.output=FULL


# Out Of Memory detection.
# (Simple match)
wrapper.filter.trigger.1000=java.lang.OutOfMemoryError
# (Only match text in stack traces if -XX:+PrintClassHistogram is being used.)
#wrapper.filter.trigger.1000=Exception in thread "*" java.lang.OutOfMemoryError
#wrapper.filter.allow_wildcards.1000=TRUE
wrapper.filter.action.1000=RESTART
wrapper.filter.message.1000=The JVM has run out of memory.


#********************************************************************
# Wrapper Email Notifications. (Requires Professional Edition)
#********************************************************************
# Common Event Email settings.
#wrapper.event.default.email.debug=TRUE
#wrapper.event.default.email.smtp.host=<SMTP_Host>
#wrapper.event.default.email.smtp.port=25
#wrapper.event.default.email.subject=[%WRAPPER_HOSTNAME%:%WRAPPER_NAME%:%WRAPPER_EVENT_NAME%] Event Notification
#wrapper.event.default.email.sender=<Sender email>
#wrapper.event.default.email.recipient=<Recipient email>


# Configure the log attached to event emails.
#wrapper.event.default.email.attach_log=TRUE
#wrapper.event.default.email.maillog.lines=50
#wrapper.event.default.email.maillog.format=LPTM
#wrapper.event.default.email.maillog.loglevel=INFO


# Enable specific event emails.
#wrapper.event.wrapper_start.email=TRUE
#wrapper.event.jvm_prelaunch.email=TRUE
#wrapper.event.jvm_start.email=TRUE
#wrapper.event.jvm_started.email=TRUE
#wrapper.event.jvm_deadlock.email=TRUE
#wrapper.event.jvm_stop.email=TRUE
#wrapper.event.jvm_stopped.email=TRUE
#wrapper.event.jvm_restart.email=TRUE
#wrapper.event.jvm_failed_invocation.email=TRUE
#wrapper.event.jvm_max_failed_invocations.email=TRUE
#wrapper.event.jvm_kill.email=TRUE
#wrapper.event.jvm_killed.email=TRUE
#wrapper.event.jvm_unexpected_exit.email=TRUE
#wrapper.event.wrapper_stop.email=TRUE


# Specify custom mail content
wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n


#********************************************************************
# Wrapper Windows NT/2000/XP Service Properties
#********************************************************************
# WARNING - Do not modify any of these properties when an application
#  using this configuration file has been installed as a service.
#  Please uninstall the service before modifying this section.  The
#  service can then be reinstalled.


# Name of the service
wrapper.name=@app.name@


# Display name of the service
wrapper.displayname=@app.long.name@


# Description of the service
wrapper.description=@app.long.name@


# Service dependencies.  Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=


# Mode in which the service is installed.  AUTO_START, DELAY_START or DEMAND_START
wrapper.ntservice.starttype=AUTO_START


# Allow the service to interact with the desktop.
wrapper.ntservice.interactive=false


Run as Linux Daemon mode

  • MultiThreads-linux-x86-64/MultiThreads.sh remove
  • MultiThreads-linux-x86-64/MultiThreads.sh install
  • MultiThreads-linux-x86-64/MultiThreads.sh start

Run as console mode

  • MultiThreads-linux-x86-64\MultiThreads.bat console