systemd здесь прав. Вы пытаетесь запустить его из chroot, но chroot имеет совершенно другой набор путей, библиотек и сервисов. Разрешить вам вызывать systemctl было бы беспорядком :это правильная библиотека D -Bus? Версии systemctl внутри такие же, как у демона снаружи?
Если все, что вы хотите сделать, это использовать службу внутри chroot, у вас есть два варианта:
systemd-nspawn --boot
для запуска отдельного экземпляра systemd внутри chroot. Затем вы можете включить его, и он будет действовать только внутри. Оболочка — это всего лишь очень плохой инструмент для разбора текста . Вы должны использовать его только для самых простых задач, и, вероятно, даже не тогда. Он медленный, неэффективный, его очень сложный синтаксис делает его подверженным ошибкам, и ему не хватает самых основных инструментов обработки текста. Кроме того, CSV — это сложный формат, допускающий вложенные и многострочные записи -. Попытка проанализировать файл CSV в оболочке просто напрашивается на неприятности.
Вместо этого используйте подходящий язык программирования с поддержкой разбора CSV. Например, в питоне:
#!/bin/python3
import csv
import sys
with open(sys.argv[1], newline='') as csvfile:
fieldnames = ("MsgID","Date","To","CC","BCC",
"Subject","Body","Status","Timestamp")
reader = csv.reader(csvfile, delimiter=',',
for row in reader:
for fieldName, value in zip(fieldnames,row):
print("%s: %s" % (fieldName,value))
Я сохранил скрипт выше как foo.py
, а затем:
MsgID: #1
Date: 13/8/2020
To: somedude@hotmail.com
CC: otherdude@hotmail.com
BCC:
Subject: Subject
Body: Dear Dude,
Information have been updated. Please login to APP to review by 30th August 2020. Thank you.
Best regards,
Mr. Mack
Status: Pending
Timestamp: 13/8/2020 12:35
Как видите, он правильно распознал все поля. Итак, чтобы также отправить почту, вы можете сделать что-то вроде этого (адаптировано отсюда):
#!/bin/python3
import csv
import sys
import subprocess
import os
def send_message(to, cc, bcc, subject, body):
try:
process = subprocess.Popen(['mail', '-s', subject, '-c', cc, '-b', bcc, to],
stdin=subprocess.PIPE)
except Exception as error:
print(error)
process.communicate(body)
with open(sys.argv[1], newline='') as csvfile:
reader = csv.reader(csvfile, delimiter=',')
for row in reader:
(msgID, date, to, cc, bcc, subj, body, status, timestamp) = row
send_message(to, cc, bcc, subj, body)
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ :Похоже, вы используете BSD mail
, судя по имеющимся у вас параметрам. У меня нет доступа к работающей системе с установленным этим инструментом, поэтому я не смог протестировать приведенный выше сценарий отправки почты. По крайней мере, это должно послужить хорошим началом.
Вы можете использовать такой инструмент, как Miller (https://github.com/johnkerl/miller), специализированный для работы со структурированными текстовыми данными.
В примере, начиная с этого input.txt
файла
#1,13/8/2020,somedude@hotmail.com,otherdude@hotmail.com,,Subject,"Dear Dude,
Information have been updated. Please login to APP to review by 30th August 2020. Thank you.
Best regards,
Mr. Mack",Pending,13/8/2020 12:35
и работает
mlr --implicit-csv-header --c2x cat then label MsgID,Date,To,CC,BCC,Subject,Body,Status,Timestamp input.txt
у вас будет
MsgID #1
Date 13/8/2020
To somedude@hotmail.com
CC otherdude@hotmail.com
BCC
Subject Subject
Body Dear Dude,
Information have been updated. Please login to APP to review by 30th August 2020. Thank you.
Best regards,
Mr. Mack
Status Pending
Timestamp 13/8/2020 12:35
Если вы хотите удалить возврат каретки в поле body, вы можете запустить
mlr --implicit-csv-header --c2x cat then label MsgID,Date,To,CC,BCC,Subject,Body,Status,Timestamp then put '$Body=gsub($Body,"\n"," ")' input.txt
иметь
MsgID #1
Date 13/8/2020
To somedude@hotmail.com
CC otherdude@hotmail.com
BCC
Subject Subject
Body Dear Dude, Information have been updated. Please login to APP to review by 30th August 2020. Thank you. Best regards, Mr. Mack
Status Pending
Timestamp 13/8/2020 12:35