<div dir="ltr">Ok,<div>After a while of experimenting I want to provide some feedback to the great help that was provided here.</div><div>I've come up with a init.d script (currently running on Ubuntu) that provides me with what I needed.</div><div><br></div><div>As a reminder:</div><div><ul><li>I have an Erlang 17.4 release generated with rebar.</li><li>I want to have the release started on system boot.</li><li>I want to the VM monitored and restarted it if it crashes.</li></ul></div><div><br></div><div>First, ensure that the `<font face="monospace, monospace">-heart`</font> option is used in your `<font face="monospace, monospace">vm.args`</font> file. Heart will monitor the VM and restart it if needed.</div><div><br></div><div>Second, create the file `/etc/init.d/myapp`:</div><div><br></div><div><br></div><div>########################################################################<br></div><div><br></div><div><div>#!/usr/bin/env bash</div><div># myapp daemon</div><div># chkconfig: 345 20 80</div><div># description: myapp daemon</div><div># processname: myapp</div><div><br></div><div>NAME=myapp</div><div>PROJECT_ROOT_PATH=/usr/local/$NAME</div><div>APP_SCRIPT="bin/$NAME"</div><div><br></div><div># export</div><div>export HOME=/root</div><div><br></div><div>case "$1" in</div><div>start)</div><div>    printf "%-50s" "Starting $NAME..."</div><div><br></div><div>    # start</div><div>    cd $PROJECT_ROOT_PATH</div><div>    $APP_SCRIPT start > /dev/null 2>&1;</div><div><br></div><div>    # wait for pid</div><div>    for (( i=0; i<10; ++i )); do</div><div>        OUT=`$APP_SCRIPT getpid`;</div><div>        if [ $? == 0 ]; then PID=$OUT; break; fi</div><div>        sleep 1;</div><div>    done</div><div><br></div><div>    if [ -z "$PID" ]; then</div><div>        printf "%s\n" "Failsd"</div><div>    else</div><div>        printf "%s\n" "Ok"</div><div>    fi</div><div>;;</div><div>status)</div><div>    printf "%-50s" "Checking $NAME..."</div><div><br></div><div>    # wait for pid</div><div>    cd $PROJECT_ROOT_PATH</div><div>    $APP_SCRIPT getpid > /dev/null 2>&1;</div><div><br></div><div>    if [ $? != 0 ]; then</div><div>        printf "%s\n" "Node is not running!"</div><div>    else</div><div>        printf "%s\n" "Ok"</div><div>    fi</div><div>;;</div><div>stop)</div><div>    printf "%-50s" "Stopping $NAME..."</div><div><br></div><div>    # cd and stop</div><div>    cd $PROJECT_ROOT_PATH</div><div>    $APP_SCRIPT stop > /dev/null 2>&1;</div><div><br></div><div>    if [ $? != 0 ]; then</div><div>        printf "%s\n" "Node is not running!"</div><div>    else</div><div>        printf "%s\n" "Ok"</div><div>    fi</div><div>;;</div><div><br></div><div>restart)</div><div>    $0 stop</div><div>    $0 start</div><div>;;</div><div><br></div><div>*)</div><div>    echo "Usage: $0 {status|start|stop|restart}"</div><div>    exit 1</div><div>esac</div></div><div><br></div><div><br></div><div><div>########################################################################<br></div></div><div><br></div><div>You can use this file as normal services:</div><div><br></div><div>```</div><div>$ sudo service cometa start</div><div>Starting myapp...                                Ok<br></div>







<div>```</div><div><br></div><div><br></div><div>Third, ensure this script is used at boot time:</div><div><br></div><div>`sudo update-rc.d myapp defaults`</div><div><br><div><br></div><div><br></div><div>Side note: you can see that the script waits to exit the start function until the PID is retrieved from the VM.</div><div>This is not strictly necessary, although in this way you can even consider dumping it into PID files or perform other types of monitoring actions instead of using HEART.</div><div><br></div><div><br></div><div>Hope this helps someone in my same spot.</div><div><br></div><div>Best,</div><div>r.</div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 13, 2015 at 3:54 PM, Tristan Sloughter <span dir="ltr"><<a href="mailto:t@crashfast.com" target="_blank">t@crashfast.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><u></u>




<div><div>Use remote_console instead of attach.</div>
<div> </div>
<div><div>--<br></div>
<div>Tristan Sloughter<br></div>
<div><a href="mailto:t@crashfast.com" target="_blank">t@crashfast.com</a><br></div>
<div> </div>
</div><div><div class="h5">
<div> </div>
<div> </div>
<div>On Wed, May 13, 2015, at 06:41 AM, Roberto Ostinelli wrote:<br></div>
<blockquote type="cite"><div dir="ltr"><div>Hi,<br></div>
<div>Still experiencing weirdnesses though.<br></div>
<div> </div>
<div>My upstart script is:<br></div>
<div> </div>
<div><div><span style="font-family:monospace,' monospace'">script</span><br></div>
<div><span style="font-family:monospace,' monospace'"><span style="white-space:pre-wrap"></span>export HOME=/root</span><br></div>
<div><span style="font-family:monospace,' monospace'"><span style="white-space:pre-wrap"></span>cd /usr/local/myapp</span><br></div>
<div><span style="font-family:monospace,' monospace'">    exec bin/myapp foreground > /dev/null 2>&1</span><br></div>
<div><span style="font-family:monospace,' monospace'">end script</span><br></div>
</div>
<div> </div>
<div> </div>
<div>When I start to attach to the app's node, I get:<br></div>
<div> </div>
<div><div><span style="font-family:monospace,' monospace'">$ /usr/local/myapp/bin/myapp attach</span><br></div>
<div><span style="font-family:monospace,' monospace'">pong</span><br></div>
<div><span style="font-family:monospace,' monospace'">Can't access pipe directory /tmp//usr/local/myapp/: No such file or directory</span><br></div>
</div>
<div> </div>
<div> </div>
<div>However, if I start my app manually:<br></div>
<div> </div>
<div><span style="font-family:monospace,monospace">$ /usr/local/myapp/bin/myapp</span><span style="font-family:monospace,monospace"> start</span><br></div>
<div> </div>
<div>Then everything works fine:<br></div>
<div> </div>
<div><div><span style="font-family:monospace,' monospace'">$ /usr/local/cometa/bin/cometa attach</span><br></div>
<div><span style="font-family:monospace,' monospace'">pong</span><br></div>
<div><span style="font-family:monospace,' monospace'">Attaching to /tmp//usr/local/myapp/erlang.pipe.1 (^D to exit)</span><br></div>
<div> </div>
<div><span style="font-family:monospace,' monospace'">(myapp@</span><span style="font-family:monospace,monospace">myapp.example</span><span style="font-family:monospace,' monospace'">.com)1></span><br></div>
</div>
<div> </div>
<div> </div>
<div>Can some kind soul explain to me what is going on?<br></div>
<div> </div>
<div>Thank you,<br></div>
<div>r.<br></div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
<div> </div>
</div>
<div><div> </div>
<div><div>On Tue, May 12, 2015 at 8:44 PM, Roger Lipscombe <span dir="ltr"><<a href="mailto:roger@differentpla.net" target="_blank">roger@differentpla.net</a>></span> wrote:<br></div>
<blockquote style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">On 12 May 2015 at 18:45, Roberto Ostinelli<br> <span><<a href="mailto:roberto.ostinelli@widetag.com" target="_blank">roberto.ostinelli@widetag.com</a>> wrote:<br>
> Right. Unfortunately I can't find a way to oass this pid to the original script that starts it (using upstart).<br> <br></span>We use relx-generated releases with upstart. Simply run "bin/myapp<br>
foreground" from the upstart script.</blockquote></div>
<div> </div>
</div>
</blockquote></div></div></div>

</blockquote></div><br></div></div>