You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@nifi.apache.org by Ryan H <rh...@gmail.com> on 2016/06/21 14:21:16 UTC

0.6.1 & 0.7.0 chkconfig (start on boot) bug centos 7

I'm trying to get the 0.7.0 NiFi to start on boot on linux/centos 7.
During all this, I've noticed 0.6.1 doesn't quite work either, left some
notes at the bottom about that.

*For 0.7.0:*
*I followed the modified install commands for the nifi.sh script:*
I untar'd it in:
 #/opt/nifi/current -> nifi-0.7.0-SNAPSHOT

I followed these steps:
##Edited the nifi.sh script for the SCRIPT_DIR issue.
#/opt/nifi/current/bin/nifi.sh install
*#chkconfig nifi on  <--- Turn on for boot 2345 run levels*
#service nifi start

NiFi is now started.

I reboot the box.

*NiFi does not start.*  There's no logs in /var/log/messages or
/opt/nifi/current/logs indicating why.  (This script should probably log
someplace)

*Why?*
The current script has a command that starts as:
#cd ${NIFI_HOME} && sudo -u ${run_as} <rest-of-command> &

The sudo part is omitted if there is no ${run_as} user defined. This works
for starting the service by hand. However, if this script is set to start
on boot with a ${run_as} user, in this case using chkconfig, it will
silently fail when starting on boot because of the "sudo" part.  Not sure
why "sudo" isn't well liked in CentOS 7 in a service script.

*How we fixed it:*
Fixed by structuring the command like this the nifi.sh script like this:

Old Command:
    ## RUN_NIFI_CMD="cd "\""${NIFI_HOME}"\"" && ${sudo_cmd_prefix}
"\""${JAVA}"\"" -cp "\""${BOOTSTRAP_CLASSPATH}"\"" -Xms12m -Xmx24m
${BOOTSTRAP_DIR_PARAMS}  org.apache.nifi.bootstrap.RunNiFi"

Put it into the if's:
    #if [ "$1" = "start" ]; then
    #    RUN_NIFI_CMD="su -c "\""cd "\""${NIFI_HOME}"\"" && "\""${JAVA}"\""
-cp "\""${BOOTSTRAP_CLASSPATH}"\"" -Xms12m -Xmx24m ${BOOTSTRAP_DIR_PARAMS}
 org.apache.nifi.bootstrap.RunNiFi $@ &"\"" ${run_as}"
    #    (eval $RUN_NIFI_CMD)
    #else
    #    RUN_NIFI_CMD="su -c "\""cd "\""${NIFI_HOME}"\"" && "\""${JAVA}"\""
-cp "\""${BOOTSTRAP_CLASSPATH}"\"" -Xms12m -Xmx24m ${BOOTSTRAP_DIR_PARAMS}
 org.apache.nifi.bootstrap.RunNiFi $@"\"" ${run_as}"
    #    (eval $RUN_NIFI_CMD)
    #fi


It now starts on boot.

----------------------------------------

*Logging in this file:*
* I created a /var/log/nifi dir as root
* I started piping echo statements to "tee -a /var/log/nifi/init.log"
** *Example: #echo "Attempting to start NiFi" | tee -a
/var/log/nifi/init.log

----------------------------------------

*For 0.6.1:*
*I followed the standard install commands for the nifi.sh script.*

I untar'd it in:
 #/opt/nifi/current -> nifi-0.7.0-SNAPSHOT

I followed these steps:
#/opt/nifi/current/bin/nifi.sh install
*#chkconfig nifi on  <--- Turn on for boot 2345 run levels*
#service nifi start

NiFi is now started.

I reboot the box.

*NiFi does not start.*  There's no logs in /var/log/messages or
/opt/nifi/current/logs indicating why.  (This script should probably log
someplace)

*Why?*
The current script has a command that starts as:
#cd ${NIFI_HOME} && sudo -u ${run_as} <rest-of-command> &

The sudo part is omitted if there is no ${run_as} user defined. This works
for starting the service by hand. However, if this script is set to start
on boot with a ${run_as} user, in this case using chkconfig, it will
silently fail when starting on boot because of the "sudo" part.  Not sure
why "sudo" isn't well liked in CentOS 7 in a service script.

*How we fixed it:*
Fixed by structuring the command like this:
#su -c "cd ${NIFI_HOME} && <rest-of-command> &" ${run_as}

This works when starting on boot if you have a ${run_as} user defined,
though not sure of the behavior if there is no ${run_as} user defined or if
the ${run_as} user is root.
--------------------------------------------------

Thanks,
Ryan

Re: 0.6.1 & 0.7.0 chkconfig (start on boot) bug centos 7

Posted by Joe Witt <jo...@gmail.com>.
Hello

Many apologies that there hasn't been any follow up.  Can you please
turn this into a JIRA if this is still an issue.

Thanks
Joe

On Wed, Jun 22, 2016 at 3:38 PM, Nicholas Hughes
<ni...@gmail.com> wrote:
> Ryan,
>
> I ran into a similar issue, in that our security policies generally don't
> allow sudo for much... even for the root account in an init script. I
> didn't want to hack up the nifi.sh script too much, so I just popped out a
> quick systemd unit file:
>
> [Unit]
> Description=Apache NiFi
> After=syslog.target network.target
>
> [Service]
> User=nifi
> Type=simple
> ExecStart=/bin/java -cp /opt/nifi/conf/:/opt/nifi/lib/bootstrap/* -Xms12m
> -Xmx24m
> -Dorg.apache.nifi.bootstrap.config.file=/opt/nifi/conf/bootstrap.conf
> org.apache.nifi.bootstrap.RunNiFi start
> ExecStop=/bin/java -cp /opt/nifi/conf/:/opt/nifi/lib/bootstrap/* -Xms12m
> -Xmx24m
> -Dorg.apache.nifi.bootstrap.config.file=/opt/nifi/conf/bootstrap.conf
> org.apache.nifi.bootstrap.RunNiFi stop
> Restart=always
> RestartSec=360
>
> [Install]
> WantedBy=multi-user.target
>
>
> Paths may have to be changed depending on your installation. It's not too
> fancy, but it seems to work just fine for EL7.
>
> -Nick
>
>
> On Tue, Jun 21, 2016 at 10:21 AM, Ryan H <rh...@gmail.com>
> wrote:
>
>> I'm trying to get the 0.7.0 NiFi to start on boot on linux/centos 7.
>> During all this, I've noticed 0.6.1 doesn't quite work either, left some
>> notes at the bottom about that.
>>
>> *For 0.7.0:*
>> *I followed the modified install commands for the nifi.sh script:*
>> I untar'd it in:
>>  #/opt/nifi/current -> nifi-0.7.0-SNAPSHOT
>>
>> I followed these steps:
>> ##Edited the nifi.sh script for the SCRIPT_DIR issue.
>> #/opt/nifi/current/bin/nifi.sh install
>> *#chkconfig nifi on  <--- Turn on for boot 2345 run levels*
>> #service nifi start
>>
>> NiFi is now started.
>>
>> I reboot the box.
>>
>> *NiFi does not start.*  There's no logs in /var/log/messages or
>> /opt/nifi/current/logs indicating why.  (This script should probably log
>> someplace)
>>
>> *Why?*
>> The current script has a command that starts as:
>> #cd ${NIFI_HOME} && sudo -u ${run_as} <rest-of-command> &
>>
>> The sudo part is omitted if there is no ${run_as} user defined. This works
>> for starting the service by hand. However, if this script is set to start
>> on boot with a ${run_as} user, in this case using chkconfig, it will
>> silently fail when starting on boot because of the "sudo" part.  Not sure
>> why "sudo" isn't well liked in CentOS 7 in a service script.
>>
>> *How we fixed it:*
>> Fixed by structuring the command like this the nifi.sh script like this:
>>
>> Old Command:
>>     ## RUN_NIFI_CMD="cd "\""${NIFI_HOME}"\"" && ${sudo_cmd_prefix}
>> "\""${JAVA}"\"" -cp "\""${BOOTSTRAP_CLASSPATH}"\"" -Xms12m -Xmx24m
>> ${BOOTSTRAP_DIR_PARAMS}  org.apache.nifi.bootstrap.RunNiFi"
>>
>> Put it into the if's:
>>     #if [ "$1" = "start" ]; then
>>     #    RUN_NIFI_CMD="su -c "\""cd "\""${NIFI_HOME}"\"" && "\""${JAVA}"\""
>> -cp "\""${BOOTSTRAP_CLASSPATH}"\"" -Xms12m -Xmx24m ${BOOTSTRAP_DIR_PARAMS}
>>  org.apache.nifi.bootstrap.RunNiFi $@ &"\"" ${run_as}"
>>     #    (eval $RUN_NIFI_CMD)
>>     #else
>>     #    RUN_NIFI_CMD="su -c "\""cd "\""${NIFI_HOME}"\"" && "\""${JAVA}"\""
>> -cp "\""${BOOTSTRAP_CLASSPATH}"\"" -Xms12m -Xmx24m ${BOOTSTRAP_DIR_PARAMS}
>>  org.apache.nifi.bootstrap.RunNiFi $@"\"" ${run_as}"
>>     #    (eval $RUN_NIFI_CMD)
>>     #fi
>>
>>
>> It now starts on boot.
>>
>> ----------------------------------------
>>
>> *Logging in this file:*
>> * I created a /var/log/nifi dir as root
>> * I started piping echo statements to "tee -a /var/log/nifi/init.log"
>> ** *Example: #echo "Attempting to start NiFi" | tee -a
>> /var/log/nifi/init.log
>>
>> ----------------------------------------
>>
>> *For 0.6.1:*
>> *I followed the standard install commands for the nifi.sh script.*
>>
>> I untar'd it in:
>>  #/opt/nifi/current -> nifi-0.7.0-SNAPSHOT
>>
>> I followed these steps:
>> #/opt/nifi/current/bin/nifi.sh install
>> *#chkconfig nifi on  <--- Turn on for boot 2345 run levels*
>> #service nifi start
>>
>> NiFi is now started.
>>
>> I reboot the box.
>>
>> *NiFi does not start.*  There's no logs in /var/log/messages or
>> /opt/nifi/current/logs indicating why.  (This script should probably log
>> someplace)
>>
>> *Why?*
>> The current script has a command that starts as:
>> #cd ${NIFI_HOME} && sudo -u ${run_as} <rest-of-command> &
>>
>> The sudo part is omitted if there is no ${run_as} user defined. This works
>> for starting the service by hand. However, if this script is set to start
>> on boot with a ${run_as} user, in this case using chkconfig, it will
>> silently fail when starting on boot because of the "sudo" part.  Not sure
>> why "sudo" isn't well liked in CentOS 7 in a service script.
>>
>> *How we fixed it:*
>> Fixed by structuring the command like this:
>> #su -c "cd ${NIFI_HOME} && <rest-of-command> &" ${run_as}
>>
>> This works when starting on boot if you have a ${run_as} user defined,
>> though not sure of the behavior if there is no ${run_as} user defined or if
>> the ${run_as} user is root.
>> --------------------------------------------------
>>
>> Thanks,
>> Ryan
>>

Re: 0.6.1 & 0.7.0 chkconfig (start on boot) bug centos 7

Posted by Nicholas Hughes <ni...@gmail.com>.
Ryan,

I ran into a similar issue, in that our security policies generally don't
allow sudo for much... even for the root account in an init script. I
didn't want to hack up the nifi.sh script too much, so I just popped out a
quick systemd unit file:

[Unit]
Description=Apache NiFi
After=syslog.target network.target

[Service]
User=nifi
Type=simple
ExecStart=/bin/java -cp /opt/nifi/conf/:/opt/nifi/lib/bootstrap/* -Xms12m
-Xmx24m
-Dorg.apache.nifi.bootstrap.config.file=/opt/nifi/conf/bootstrap.conf
org.apache.nifi.bootstrap.RunNiFi start
ExecStop=/bin/java -cp /opt/nifi/conf/:/opt/nifi/lib/bootstrap/* -Xms12m
-Xmx24m
-Dorg.apache.nifi.bootstrap.config.file=/opt/nifi/conf/bootstrap.conf
org.apache.nifi.bootstrap.RunNiFi stop
Restart=always
RestartSec=360

[Install]
WantedBy=multi-user.target


Paths may have to be changed depending on your installation. It's not too
fancy, but it seems to work just fine for EL7.

-Nick


On Tue, Jun 21, 2016 at 10:21 AM, Ryan H <rh...@gmail.com>
wrote:

> I'm trying to get the 0.7.0 NiFi to start on boot on linux/centos 7.
> During all this, I've noticed 0.6.1 doesn't quite work either, left some
> notes at the bottom about that.
>
> *For 0.7.0:*
> *I followed the modified install commands for the nifi.sh script:*
> I untar'd it in:
>  #/opt/nifi/current -> nifi-0.7.0-SNAPSHOT
>
> I followed these steps:
> ##Edited the nifi.sh script for the SCRIPT_DIR issue.
> #/opt/nifi/current/bin/nifi.sh install
> *#chkconfig nifi on  <--- Turn on for boot 2345 run levels*
> #service nifi start
>
> NiFi is now started.
>
> I reboot the box.
>
> *NiFi does not start.*  There's no logs in /var/log/messages or
> /opt/nifi/current/logs indicating why.  (This script should probably log
> someplace)
>
> *Why?*
> The current script has a command that starts as:
> #cd ${NIFI_HOME} && sudo -u ${run_as} <rest-of-command> &
>
> The sudo part is omitted if there is no ${run_as} user defined. This works
> for starting the service by hand. However, if this script is set to start
> on boot with a ${run_as} user, in this case using chkconfig, it will
> silently fail when starting on boot because of the "sudo" part.  Not sure
> why "sudo" isn't well liked in CentOS 7 in a service script.
>
> *How we fixed it:*
> Fixed by structuring the command like this the nifi.sh script like this:
>
> Old Command:
>     ## RUN_NIFI_CMD="cd "\""${NIFI_HOME}"\"" && ${sudo_cmd_prefix}
> "\""${JAVA}"\"" -cp "\""${BOOTSTRAP_CLASSPATH}"\"" -Xms12m -Xmx24m
> ${BOOTSTRAP_DIR_PARAMS}  org.apache.nifi.bootstrap.RunNiFi"
>
> Put it into the if's:
>     #if [ "$1" = "start" ]; then
>     #    RUN_NIFI_CMD="su -c "\""cd "\""${NIFI_HOME}"\"" && "\""${JAVA}"\""
> -cp "\""${BOOTSTRAP_CLASSPATH}"\"" -Xms12m -Xmx24m ${BOOTSTRAP_DIR_PARAMS}
>  org.apache.nifi.bootstrap.RunNiFi $@ &"\"" ${run_as}"
>     #    (eval $RUN_NIFI_CMD)
>     #else
>     #    RUN_NIFI_CMD="su -c "\""cd "\""${NIFI_HOME}"\"" && "\""${JAVA}"\""
> -cp "\""${BOOTSTRAP_CLASSPATH}"\"" -Xms12m -Xmx24m ${BOOTSTRAP_DIR_PARAMS}
>  org.apache.nifi.bootstrap.RunNiFi $@"\"" ${run_as}"
>     #    (eval $RUN_NIFI_CMD)
>     #fi
>
>
> It now starts on boot.
>
> ----------------------------------------
>
> *Logging in this file:*
> * I created a /var/log/nifi dir as root
> * I started piping echo statements to "tee -a /var/log/nifi/init.log"
> ** *Example: #echo "Attempting to start NiFi" | tee -a
> /var/log/nifi/init.log
>
> ----------------------------------------
>
> *For 0.6.1:*
> *I followed the standard install commands for the nifi.sh script.*
>
> I untar'd it in:
>  #/opt/nifi/current -> nifi-0.7.0-SNAPSHOT
>
> I followed these steps:
> #/opt/nifi/current/bin/nifi.sh install
> *#chkconfig nifi on  <--- Turn on for boot 2345 run levels*
> #service nifi start
>
> NiFi is now started.
>
> I reboot the box.
>
> *NiFi does not start.*  There's no logs in /var/log/messages or
> /opt/nifi/current/logs indicating why.  (This script should probably log
> someplace)
>
> *Why?*
> The current script has a command that starts as:
> #cd ${NIFI_HOME} && sudo -u ${run_as} <rest-of-command> &
>
> The sudo part is omitted if there is no ${run_as} user defined. This works
> for starting the service by hand. However, if this script is set to start
> on boot with a ${run_as} user, in this case using chkconfig, it will
> silently fail when starting on boot because of the "sudo" part.  Not sure
> why "sudo" isn't well liked in CentOS 7 in a service script.
>
> *How we fixed it:*
> Fixed by structuring the command like this:
> #su -c "cd ${NIFI_HOME} && <rest-of-command> &" ${run_as}
>
> This works when starting on boot if you have a ${run_as} user defined,
> though not sure of the behavior if there is no ${run_as} user defined or if
> the ${run_as} user is root.
> --------------------------------------------------
>
> Thanks,
> Ryan
>