Starter brachte den Daemon bei seiner ersten Logzeile um
Die Aufgabe scheiterte mit Code 1, abdulive.log gab es gar nicht. Ursache:
& $node $main ingest 2>&1 | ForEach-Object { ... }
Windows PowerShell 5.1 verpackt jede stderr-Zeile eines nativen Programms
in einen ErrorRecord. Zusammen mit $ErrorActionPreference = Stop beendet
das sofort das ganze Skript - und der Daemon schreibt im Normalbetrieb
Warnungen auf stderr ("Kein Broadcaster-Token ..."). Er starb also an
seiner eigenen ersten Meldung, bevor irgendetwas ins Protokoll kam.
- launcher.ps1 startet jetzt ueber Start-Process mit getrennten
Umleitungen fuer stdout und stderr, je Lauf rotiert
- install.ps1 ruft native Programme ueber eine Hilfsfunktion auf, die
ErrorActionPreference kurz zurueckstellt
- NODE_OPTIONS=--disable-warning=ExperimentalWarning fehlte im Paket; im
Container stand es in der Dockerfile
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AhVSfMFdWnXKCv5JfLnArZ
This commit is contained in:
1 parent
56af15cf3f
commit
18421a1af0
3 files changed
+57
-10
No files matched your search
@@ -184,9 +184,18 @@ async function main(): Promise<void> {
|
|||||||
name: 'version.json',
|
name: 'version.json',
|
||||||
data: Buffer.from(JSON.stringify(manifestInPackage, null, 2) + '\n'),
|
data: Buffer.from(JSON.stringify(manifestInPackage, null, 2) + '\n'),
|
||||||
});
|
});
|
||||||
|
// NODE_OPTIONS setzen: node:sqlite meldet sich sonst bei jedem Aufruf mit
|
||||||
|
// einer ExperimentalWarning auf stderr. Im Container stand das in der
|
||||||
|
// Dockerfile - beim Umzug ging es verloren, und unter PowerShell wird aus
|
||||||
|
// stderr schnell ein Abbruch (siehe launcher.ps1).
|
||||||
files.push({
|
files.push({
|
||||||
name: 'abdulive.cmd',
|
name: 'abdulive.cmd',
|
||||||
data: Buffer.from('@echo off\r\n"%~dp0node.exe" "%~dp0app\\apps\\cli\\main.ts" %*\r\n'),
|
data: Buffer.from([
|
||||||
|
'@echo off',
|
||||||
|
'set "NODE_OPTIONS=--disable-warning=ExperimentalWarning"',
|
||||||
|
'"%~dp0node.exe" "%~dp0app\\apps\\cli\\main.ts" %*',
|
||||||
|
'',
|
||||||
|
].join('\r\n')),
|
||||||
});
|
});
|
||||||
|
|
||||||
// --- packen
|
// --- packen
|
||||||
|
|||||||
+21
-4
@@ -30,6 +30,24 @@ param(
|
|||||||
$ErrorActionPreference = 'Stop'
|
$ErrorActionPreference = 'Stop'
|
||||||
$daten = Join-Path $env:LOCALAPPDATA 'abdulive'
|
$daten = Join-Path $env:LOCALAPPDATA 'abdulive'
|
||||||
|
|
||||||
|
# Experimentelle Warnungen abschalten - node:sqlite meldet sich sonst bei
|
||||||
|
# jedem Aufruf auf stderr.
|
||||||
|
$env:NODE_OPTIONS = '--disable-warning=ExperimentalWarning'
|
||||||
|
|
||||||
|
function Ruf {
|
||||||
|
<#
|
||||||
|
Ein natives Programm aufrufen, ohne dass seine stderr-Ausgabe das
|
||||||
|
Skript beendet. Windows PowerShell 5.1 verpackt jede stderr-Zeile in
|
||||||
|
einen ErrorRecord; zusammen mit ErrorActionPreference = 'Stop' bricht
|
||||||
|
dann alles ab, sobald das Programm auch nur eine Warnung schreibt.
|
||||||
|
#>
|
||||||
|
param([string]$Datei, [string[]]$Argumente)
|
||||||
|
$alt = $ErrorActionPreference
|
||||||
|
$ErrorActionPreference = 'Continue'
|
||||||
|
try { & $Datei @Argumente; return $LASTEXITCODE }
|
||||||
|
finally { $ErrorActionPreference = $alt }
|
||||||
|
}
|
||||||
|
|
||||||
function Schritt($text) { Write-Host "==> $text" -ForegroundColor Cyan }
|
function Schritt($text) { Write-Host "==> $text" -ForegroundColor Cyan }
|
||||||
function Hinweis($text) { Write-Host " $text" -ForegroundColor DarkGray }
|
function Hinweis($text) { Write-Host " $text" -ForegroundColor DarkGray }
|
||||||
|
|
||||||
@@ -170,15 +188,14 @@ if (-not $OhneModell) {
|
|||||||
Schritt 'Sprachmodell laden (einmalig, ca. 465 MB)'
|
Schritt 'Sprachmodell laden (einmalig, ca. 465 MB)'
|
||||||
# Nicht abbrechen, wenn das schiefgeht: das Toolkit laeuft auch ohne
|
# Nicht abbrechen, wenn das schiefgeht: das Toolkit laeuft auch ohne
|
||||||
# Modell, es entstehen dann nur Clips ohne Untertitel.
|
# Modell, es entstehen dann nur Clips ohne Untertitel.
|
||||||
& $cmd fetch-model
|
$code = Ruf $cmd @('fetch-model')
|
||||||
if ($LASTEXITCODE -ne 0) {
|
if ($code -ne 0) {
|
||||||
Hinweis 'Fehlgeschlagen. Spaeter nachholen mit: abdulive fetch-model'
|
Hinweis 'Fehlgeschlagen. Spaeter nachholen mit: abdulive fetch-model'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Schritt 'Selbsttest'
|
Schritt 'Selbsttest'
|
||||||
& $cmd check-env
|
$selbsttest = Ruf $cmd @('check-env')
|
||||||
$selbsttest = $LASTEXITCODE
|
|
||||||
|
|
||||||
if (-not $KeinAutostart) {
|
if (-not $KeinAutostart) {
|
||||||
Schritt 'Starten'
|
Schritt 'Starten'
|
||||||
|
|||||||
+26
-5
@@ -59,9 +59,30 @@ $node = Join-Path $root 'node.exe'
|
|||||||
$main = Join-Path $root 'app\apps\cli\main.ts'
|
$main = Join-Path $root 'app\apps\cli\main.ts'
|
||||||
if (-not (Test-Path $node)) { Write-Log "node.exe fehlt in $root"; exit 1 }
|
if (-not (Test-Path $node)) { Write-Log "node.exe fehlt in $root"; exit 1 }
|
||||||
|
|
||||||
Write-Log 'Starte den Daemon.'
|
# Experimentelle Warnungen abschalten. node:sqlite meldet sich sonst bei
|
||||||
& $node $main ingest 2>&1 | ForEach-Object {
|
# jedem Start auf stderr - im Container stand das in der Dockerfile.
|
||||||
Add-Content -Path (Join-Path $log 'abdulive.log') -Value $_ -Encoding utf8
|
$env:NODE_OPTIONS = '--disable-warning=ExperimentalWarning'
|
||||||
|
|
||||||
|
$aus = Join-Path $log 'abdulive.log'
|
||||||
|
$fehler = Join-Path $log 'abdulive-fehler.log'
|
||||||
|
|
||||||
|
# Vorherigen Lauf beiseitelegen statt anzuhaengen: Start-Process kann nicht
|
||||||
|
# anhaengen, und ein Protokoll pro Lauf ist beim Suchen ohnehin angenehmer.
|
||||||
|
foreach ($f in @($aus, $fehler)) {
|
||||||
|
if (Test-Path $f) { Move-Item $f "$f.1" -Force }
|
||||||
}
|
}
|
||||||
Write-Log "Daemon beendet (Code $LASTEXITCODE)."
|
|
||||||
exit $LASTEXITCODE
|
Write-Log 'Starte den Daemon.'
|
||||||
|
|
||||||
|
# NICHT `& $node ... 2>&1 | ...` verwenden. Windows PowerShell 5.1 verpackt
|
||||||
|
# jede stderr-Zeile eines nativen Programms in einen ErrorRecord, und mit
|
||||||
|
# $ErrorActionPreference = 'Stop' beendet das sofort das ganze Skript. Der
|
||||||
|
# Daemon schreibt aber im Normalbetrieb Warnungen auf stderr ("Kein
|
||||||
|
# Broadcaster-Token ..."), und genau daran ist er beim ersten Versuch
|
||||||
|
# gestorben - noch bevor eine einzige Zeile im Protokoll stand.
|
||||||
|
$p = Start-Process -FilePath $node -ArgumentList @($main, 'ingest') `
|
||||||
|
-NoNewWindow -PassThru -Wait `
|
||||||
|
-RedirectStandardOutput $aus -RedirectStandardError $fehler
|
||||||
|
|
||||||
|
Write-Log "Daemon beendet (Code $($p.ExitCode))."
|
||||||
|
exit $p.ExitCode
|
||||||
Reference in new issue
Block a user