Mein Kollege schrieb eine Dancer psgi-Anwendung namens "Newlands", die Perlbrew verwendet. Ich versuche, die Anwendung zum Systemstart mit Systemd zu starten. Ich habe diese Service-Datei:Systemdienst für eine Perlbrew-Anwendung?
[Unit]
Description=Newlands
After=network-online.target
[Service]
Type=forking
User=newlands
WorkingDirectory=/home/newlands/working/newlands
PIDFile=/home/newlands/newlands.pid
ExecStartPre=/bin/bash -c 'env > /tmp/newlands.environment'
ExecStartPre=/bin/mkdir -p /tmp/newlands/newlands/session/
ExecStart=/usr/local/bin/starman --host 127.0.0.1 --listen :5000 --env production --preload-app --workers 12 --daemonize --error-log /var/log/newlands/newlands.error.log --pid /home/newlands/newlands.pid bin/newlandia.psgi
EnvironmentFile=-/tmp/newlands.environment
Restart=always
[Install]
WantedBy=multi-user.target
Aber auch mit dem ExecStartPre Trick (was ich von http://tech.akom.net/archives/93-Getting-a-systemd-unit-to-read-your-.bashrc-file-for-its-environment.html bekam, veränderte nicht die --login Option), keine des perlbrew bezogenen Umgebungsvariablen richtig gesetzt zu werden. So habe ich am Ende mit Fehlern Anzeige- fehlende Bibliotheken nicht in @INC gefunden, wenn @INC nichts an /home/newlands/.perlbrew/libs/[email protected] enthalten, wo die Bibliotheken tatsächlich sind.
Es scheint, dass die ausgegebene Datei in /tmp/newlands.environment noch erheblich von der Ausgabe von "env" abweicht, wenn sie tatsächlich als Newlands-Benutzer angemeldet ist. Ich würde gerne/opt/perlbrew/etc/bashrc oder etwas ähnliches, aber ich verstehe, dass das nicht möglich ist.
Irgendwelche Tipps? Vielen Dank!
Re "* keine der perlbrew-bezogenen Umgebungsvariablen werden richtig gesetzt *", 'perlbrew' dient zwei Zwecken, 1) einem Wrapper für ein' Perl'-Installer und 2) einem PATH-Manipulationstool. Keine davon sollte hier relevant sein. – ikegami
Re "* Am Ende gibt es Fehler, die auf fehlende Bibliotheken hinweisen, die nicht in @INC gefunden wurden, wenn @INC nichts enthält in/home/newlands/.perlbrew/libs/perl-5.20.1 @ newlands, wo die Bibliotheken sind eigentlich sind. * ", uh, das ist nicht der Ort, an dem' perlbrew' -installed 'perl' Build-Bibliotheken installiert. Sie scheinen den Installationsort überschrieben zu haben? Wenn dies der Fall ist, verwenden Sie 'usage lib ...' innerhalb Ihres Skripts oder legen Sie die 'PERL5LIB' env var fest. (Keines dieser Dinge hat etwas mit 'Perlbrew' zu tun. In der Tat wird' Perlbrew' normalerweise verwendet um * diese Dinge zu vermeiden!) – ikegami