Ich habe ein Shell-Skript und möchte es als normalen Job deaktivieren. Es sollte nur als bjob in LSFSicherstellen, dass ein Shell-Skript nur als lsf-Job ausgeführt wird
ausgeführt werden Wie kann ich sicherstellen, dass diese mit in Script
Ich habe ein Shell-Skript und möchte es als normalen Job deaktivieren. Es sollte nur als bjob in LSFSicherstellen, dass ein Shell-Skript nur als lsf-Job ausgeführt wird
ausgeführt werden Wie kann ich sicherstellen, dass diese mit in Script
lsfError="**ERROR: Local jobs disabled. Please run through LSF only --"
lsfExit=2
lsfLog="$(getent passwd $(id -un) | cut -d: -f6)/.lsbatch/.lsf_${LSB_JOBID}.log"
echo "**INFO: Verifying as LSF job ..."
sleep 2s
if [ -z "$LSB_JOBID" ]; then
echo "$lsfError"; exit $lsfExit
elif [[ "$(bjobs $LSB_JOBID 2>&1)" =~ "not found" ]]; then
echo "**ERROR: Job $LSB_JOBID doesn't exist" > $lsfLog
echo "$lsfError"; exit $lsfExit
elif [[ "$(bjobs -o 'command' -noheader $LSB_JOBID 2>&1)" != "$0" ]]; then
echo "**ERROR: Command not matched $(bjobs -o "command" -noheader $LSB_JOBID 2>&1) != $0" > $lsfLog
echo "$lsfError"; exit $lsfExit
fi
LSF werden einige Umgebungsvariablen im Arbeitsumfeld, wie $LSB_JOBID
eingestellt. Sie könnten das Skript schreiben, um zu prüfen, ob diese Umgebungsvariable definiert ist. Wenn nicht, erkläre, dass das Skript nur als LSF-Job ausgeführt und dann beendet werden soll.
Ich denke, man könnte erwarten, dass ein LSF Job von res
gestartet wird, so können Sie überprüfen, ob es einen ist res
Prozess in der gleichen Prozessgruppe, so etwas wie
_pgid=`ps -o pgid --no-headers -p $$`
ps -o comm,pgid --no-headers | grep -qE '^res\s+'${_pgid// /}'$' || { echo "Must submit as LSF job!"; exit 1; }
übernommen wurden. Ich habe -u $ (id -un) zum Befehl ps hinzugefügt. Es verließ, wenn nicht lsf. Aber wenn es Res-Prozess für jeden bjob gibt, wie können wir identifizieren, welche res zu welchem bjob gehört –
Ich denke, dass Sie die Prozessgruppe des Jobs verwenden könnten, um die res-Instanz zu identifizieren, die zu diesem bestimmten Job gehört; Bitte beachten Sie die Änderung. – mustaccio
ich in der Lage könnte zu bekommen Job-ID. Was sind andere Umgebungsvariablen, die LSF setzen wird? Gibt es eine Dokumentation dieser Variablen? –
Sie finden die vollständige Liste [hier] (https://www.ibm.com/support/knowledgecenter/SSETD4_9.1.3/lsf_config_ref/lsf_envars_job_exec. dita? lang = de) –
Aber immer noch Benutzer kann diese Variablen auf seinem Terminal und Skript ausführen, ohne als bjob starten. Script konnte nicht feststellen, ob diese Variablen aus LSF stammen oder von Terminal –