start maxscale process, that failed:Nov 26 17:44:45 centos maxscale[20229]: MaxScale started with 1 server threads.Nov 26 17:44:45 centos init: maxscale main process ended, respawningNov 26 17:44:45 centos maxscale[20229]: Started MaxScale log flusher.Nov 26 17:44:45 centos maxscale[20235]: Working directory: /var/log/maxscaleNov 26 17:44:45 centos maxscale[20235]: MariaDB MaxScale 2.0.1 startedNov 26 17:44:45 centos maxscale[20235]: MaxScale is running in process 20235...Nov 26 17:44:45 centos maxscale[20235]: Loaded module qc_sqlite: V1.0.0 from /usr/lib64/maxscale/libqc_sqlite.soNov 26 17:44:45 centos maxscale[20235]: MaxScale is already running. Process id: 20229. Use another location for the PID file to run multiple instances of MaxScale on the same machine.Nov 26 17:44:45 centos init: maxscale main process (20234) terminated with status 4Nov 26 17:44:45 centos init: maxscale main process ended, respawningMoreover, when proper maxscale process was killed, it was NOT respawned as expected.It was just a proper time to read the manual more carefully, this part about expect stanza (that I noted in some of official Upstart scripts):"To allow Upstart to determine the final process ID for a job, it needs to know how many times that process will call fork(2). Upstart itself cannot know the answer to this question since once a daemon is running, it could then fork a number of "worker" processes which could themselves fork any number of times. Upstart cannot be expected to know which PID is the "master" in this case, considering it does not know if worker processes will be created at all, let alone how many times, or how many times the process will fork initially. As such, it is necessary to tell Upstart which PID is the "master" or parent PID. This is achieved using the expect stanza.The syntax is simple, but you do need to know how many times your service forks."Let's check quickly how many times fork() is called in maxscale (I'd know it better if I ever cared to study the source code in details, but I had not checked most part of it yet). Test based on that cookbook gives unexpected results:[root@centos ~]# strace -o /tmp/strace.log -fFv maxscale &[1] 2369[root@centos ~]# sleep 10[root@centos ~]# ps aux | grep straceroot 2369 2.6 0.0 4476 888 pts/0 S 20:28 0:00 strace -o /tmp/strace.log -fFv maxscaleroot 2382 0.0 0.0 103312 868 pts/0 S+ 20:28 0:00 grep strace[root@centos ~]# pkill -9 strace[1]+ Killed strace -o /tmp/strace.log -fFv maxscale[root@centos ~]# ps aux | grep maxscaleroot 2375 1.3 0.2 276168 3896 ? Ssl 20:28 0:00 maxscaleroot 2385 0.0 0.0 103312 868 pts/0 S+ 20:28 0:00 grep maxscale[root@centos ~]# egrep "\<(fork|clone)\>\(" /tmp/strace.log | wc | awk '{print $1}'5How comes we have 5 fork calls? Here they are:[root@centos ~]# egrep "\<(fork|clone)\>\(" /tmp/strace.log2374 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7fb024c08ab0) = 23752375 clone(child_stack=0x7fb01f819f10, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7fb01f81a9d0, tls=0x7fb01f81a700, child_tidptr=0x7fb01f81a9d0) = 23762375 clone(child_stack=0x7fb01e118f10, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7fb01e1199d0, tls=0x7fb01e119700, child_tidptr=0x7fb01e1199d0) = 23772375 clone(child_stack=0x7fb01d10af10, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7fb01d10b9d0, tls=0x7fb01d10b700, child_tidptr=0x7fb01d10b9d0) = 23782375 clone(child_stack=0x7fb017ffef10, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID,