Замена только первого происшествия символа в строке

Я пытаюсь использовать скрипт из init.d […]

Не запускайте скрипты из /etc/init.d/ напрямую.

В операционных системах systemd нет никакой гарантии, что эти сценарии вообще существуют, не говоря уже о том, что они определяют вашу службу. Даже в Debian 7 были модули systemd, заменяющие сценарии System 5 rc ; и это в большей степени относится к Debian 8. Правильные команды для использования:

  • systemctl с его статусом , start , stop , включить и отключить подкоманды
  • service
  • update-rc.d и invoke-rc.d , но только если вы сценарий сопровождающего пакета

Именно это и происходит с вами. Ваш прямой вызов сценария заменяется через ловушку внутри широко используемой библиотеки функций сценариев Debian с вызовом (в данном конкретном случае)

systemctl restart parstart.service

. Вы даже можете увидеть это в выводе перед вами. Это то, что означает (через systemctl): parstart.service . И очевидно, что далек от того, чтобы сообщить systemd о перезапуске службы.

Интерактивные навороты внутри вашего rc скрипта, включая цветные сообщения, больше не действуют. Ваша служба не запускается как дочерний процесс systemctl . Он запускается как дочерний процесс systemd и не имеет никакого соединения с терминалом, на котором вы интерактивно выполняете команды.

Все это / etc / szarp / parstart.В любом случае создание шаблонов cfg и создание сообщений журнала для systemd совершенно не требуется. systemd предоставляет межсервисные механизмы для включения и отключения служб, а также для их автоматического перезапуска. Он регистрирует, когда запускает и останавливает службы, при этом службы не должны делать это. По моим подсчетам, этот скрипт rc довольно просто заменить 16 обычными модулями .service , по одному для каждой службы. Вот как это выглядит:

[Unit]
Description=The SZARP pserver-lite server
After=network.target 

[Service]
Type=simple
ExecStart=/usr/local/bin/pserver-lite --no-daemon

[Install]
WantedBy=multi-user.target

Назовите это /usr/local/etc/systemd/system/pserver-lite.service , запустите systemctl daemon-reload и…

  • ... информация о состоянии доступна с помощью systemctl status pserver-lite.service .
  • … вы включаете его для запуска при начальной загрузке с помощью systemctl enable pserver-lite.service .
  • … вы можете увидеть записи журнала systemd для запуска и остановки с помощью journalctl .

Это довольно просто для остальных 15.

Дополнительная литература

1
10.10.2018, 00:35
3 ответа
sed 's/;/:[/' file

{"100K":["0.00001";"10";"0.01"]}
{"101K":["0.0001";"100";"0.1"]}
{"102K":["1";"1000";"1"]}
{"102K":["1";"1000";"1"]}
{"103K":["0.01";"10000";"10"]}
{"104K":["0.1";"100000";"100"]}
{"105K":["1";"1000000";"1000"]}
{"109K":["0.000001";"1";"1"]}
{"120K":["0.000012";"12";"12"]}
7
27.01.2020, 23:12

Вы также можете попробовать две команды ниже:

perl -pne "s/;/:[/" filename
sed 's/;/:[/1' filename

Выход:

{"100K":["0.00001";"10";"0.01"]}
{"101K":["0.0001";"100";"0.1"]}
{"102K":["1";"1000";"1"]}
{"102K":["1";"1000";"1"]}
{"103K":["0.01";"10000";"10"]}
{"104K":["0.1";"100000";"100"]}
{"105K":["1";"1000000";"1000"]}
{"109K":["0.000001";"1";"1"]}
{"120K":["0.000012";"12";"12"]}
0
27.01.2020, 23:12

Поскольку вы отметили вопрос тегом :

awk '{ sub(/;/, ":["); print; }'
1
27.01.2020, 23:12

Теги

Похожие вопросы