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 <[email protected]> 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 >
