Communications between the elasticsearch JVM and the autodetect process (which ML runs) is done via named pipes, these pipes are created in /tmp. In the log there is a message that you posted, it mentions that a file in ES_HOME/tmp cannot be read.
This /tmp directory must be readable, if it is mounted with no_exec then autodetect cannot start.
/tmp is the default temporary directory the JVM uses but you can change this with the JVM option:
-Djava.io.tmpdir=/var/data/elasticsearch/tmp
You could try adding that setting to ES_HOME/config/jvm.options without a suitable choice of tmpdir. This will required a restart of elasticsearch