Как я могу запустить команду в терминале и вместо входа в окно терминала перенаправить ее в файл

Я хотел бы записать вывод журнала выполнения команды в терминале в файл. Я хочу, чтобы вывод журнала сохранялся независимо от того, произошла ли команда с ошибкой или нет. Это должно работать для любой команды в CLI (Iam using ubuntu-latest for github actions) некоторый пример кода в app.js

for(var i=0;i<5;i++){
 console.info(i);
}

Следующая команда работает хорошо

nohup node node-app/src/app.js &> logs.txt

Но когда возникает ошибка (я добавляю y, чтобы вызвать ошибку)

for(var i=0;i<5;i++){
 console.info(i*y); //here is an error
}

Приведенная выше команда терминала не работает, и job заканчивается кодом выхода 1.

Вот мой рабочий процесс

name: Send Job Logs to mail

on:
  push:
    branches:
      - main

jobs:
  send_email:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - id: logsData
      run: |
       nohup node node-app/src/app.js &> logs.txt
       cat logs.txt
       echo "logdata<<EOF" >> $GITHUB_ENV
       echo "$(tail -n +2 logs.txt)" >> $GITHUB_ENV
       echo "EOF" >> $GITHUB_ENV
       
    - name: Send log output to email
      uses: dawidd6/action-send-mail@v3
      with:
        server_address: smtp.gmail.com
        server_port: 25 
        username: ${{secrets.EMAIL_ADD}}
        password: ${{secrets.PSW_EMAIL}}
        from: john Delvin
        to: myOtherEmail@gmail.com
        subject: job-logs
        body: ${{env.logdata}}

Где у инициализируется?

coding_potato 12.02.2023 20:47

Y несет ответственность за ошибку. Я добавил это сознательно

John Delvin 12.02.2023 20:51

Так что запускайте свои команды под контролем script ...

tink 12.02.2023 21:53

@JohnDelvin: Пожалуйста, включите в свой вопрос минимальный воспроизводимый рабочий процесс ГСГ. Спасибо!

Azeem 13.02.2023 04:54

@JohnDelvin: опубликованный ответ не работает для вашего варианта использования? Какое поведение сейчас?

Azeem 13.02.2023 05:52

@Azeem, ответ, предоставленный @Sibtain, предотвращает сбой задания рабочего процесса на шаге с - id : logsData, когда возникает ошибка, шаг пропускается, а затем запускается следующий шаг, который завершается успешно.

John Delvin 13.02.2023 06:01

Azeem 13.02.2023 06:05

@ Азим это сработало. Спасибо.

John Delvin 13.02.2023 06:11

@JohnDelvin: Круто! Пожалуйста! Ответ с опубликованными подробностями. Ваше здоровье!

Azeem 13.02.2023 06:13
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Laravel - это мощный PHP-фреймворк, используемый для создания масштабируемых и надежных веб-приложений. Одним из преимуществ Laravel является его...
Что такое двойные вопросительные знаки (??) в JavaScript?
Что такое двойные вопросительные знаки (??) в JavaScript?
Как безопасно обрабатывать неопределенные и нулевые значения в коде с помощью Nullish Coalescing
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Как сделать компонент справочного центра с помощью TailwindCSS
Как сделать компонент справочного центра с помощью TailwindCSS
Справочный центр - это веб-сайт, где клиенты могут найти ответы на свои вопросы и решения своих проблем. Созданный для решения многих распространенных...
Асинхронная передача данных с помощью sendBeacon в JavaScript
Асинхронная передача данных с помощью sendBeacon в JavaScript
В современных веб-приложениях отправка данных из JavaScript на стороне клиента на сервер является распространенной задачей. Одним из популярных...
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Отказ от ответственности: Эта статья предназначена только для демонстрации и не должна использоваться в качестве инвестиционного совета.
0
9
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать continue-on-error: true в своем шаге/работе, например:

- id: logsData
  continue-on-error: true
  run: nohup node app.js &> logs.txt
- name: output log file
  run: cat logs.txt

Обновление с демо-выполнением:

Мне нужно сохранить вывод журнала в файл независимо от того, произошла ошибка или нет. Ваш ответ работает, но журнал не сохраняется. Спасибо

John Delvin 13.02.2023 00:33

Файл журнала сохранен и доступен. Вы можете использовать его на следующем шаге, который не упоминался в исходном вопросе. Смотрите мое обновление

Sibtain 13.02.2023 08:24

Это сработало . Это тоже намного чище

John Delvin 13.02.2023 13:34
Ответ принят как подходящий

Поскольку ваш вариант использования требует, чтобы вы запускали остальные команды в случае сбоя, вам нужно использовать что-то вроде этого с оператором ИЛИ (||):

nohup node node-app/src/app.js &> logs.txt || true

Это вернет true, если команда завершится ошибкой, и остальная часть потока должна работать.

Использование continue-on-error: true делает шаг пройденным, но сразу же останавливает выполнение, а остальная часть потока пропускается.

Другие вопросы по теме