Este é o comportamento esperado com o systemd.
Para entender em que ambiente os serviços do systemd são executados, você pode consultar man systemd.exec
, especificamente a seção ENVIRONMENT VARIABLES IN SPAWNED PROCESSES
. Como diz, apenas poucas variáveis são definidas e você precisa definir qualquer outra coisa sozinho.
Acontece que os arquivos em /etc/profile.d
são originados por shells interativos, e é por isso que você pode ver a variável quando você faz o login. O que você fez é exatamente o que o tutorial recomenda, então você pode ficar com ela. . Se você está preocupado com a possibilidade de uma atualização Java interromper seu arquivo de unidade, você pode fazer um link simbólico para a sua instalação do java ou até mesmo criar o arquivo na inicialização:
ExecStart=/bin/sh -c '. /etc/profile.d/setenv.sh; /opt/tomcat/bin/startup.sh'
ExecStop=/bin/sh -c '. /etc/profile.d/setenv.sh; /opt/tomcat/bin/shutdown.sh'
Eu pessoalmente ficaria com o que você já tem.