Не могу запустить сервис systemd - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь создать службу, которая запускает консоль для преобразования всех моих команд crontab в systemd в будущем, но я всегда получаю эту ошибку, я пробовал разные учебники и ту же проблему.

# systemctl status hello-world.service
● hello-world.service - Hello World Service
   Loaded: loaded (/usr/lib/systemd/system/hello-world.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since mié 2019-10-09 10:06:59 CEST; 4s ago
  Process: 26080 ExecStart=/usr/share/nginx/html/scripts-systemd/hello-world.sh (code=exited, status=203/EXEC)
 Main PID: 26080 (code=exited, status=203/EXEC)

oct 09 10:06:59 ns37 systemd[1]: Started Hello World Service.
oct 09 10:06:59 ns37 systemd[1]: hello-world.service: main process exited, code=exited, status=203/EXEC
oct 09 10:06:59 ns37 systemd[1]: Unit hello-world.service entered failed state.
oct 09 10:06:59 ns37 systemd[1]: hello-world.service failed.

hello-world.sh file

#!/bin/bash

while $(sleep 30);
do
    echo "hello world"
done

hello-world.service file

[Unit]
Description=Hello World Service
After=systend-user-sessions.service

[Service]
Type=simple
ExecStart=/usr/share/nginx/html/scripts-systemd/hello-world.sh

[Install]
WantedBy=multi-user.target

Я использую Centos 7

Редактировать: что мне нужно сделать, этоВыполняйте консольные команды в определенное время каждый день из-за проблем с crontab. Я использовал этот пример, чтобы проверить, что все работает, и как только это сработает, измените команды. Вот пример команды crontab:

*/10 * * * * cd /usr/share/nginx/html/mywebsite.com; php wp-cron.php >/dev/null 2>&1
0 0 */3 * * date=date -I; zip -r /root/copias/copia-archivos-html-webs$date.zip /usr/share/nginx/html`
15 15 * * * wget -q -O /dev/null https://mywebsite.com/?run_plugin=key_0_0

Edit2: Готово! Мне удалось это сделать, и сейчас он работает. Я оставляю код здесь, чтобы он мог быть полезен другим людям

hello-world.sh file

#!/usr/bin/env bash
/usr/bin/mysqldump -user -pass db_name >/root/copias/backupname.sql

hello-world. сервис

[Unit]
Description=CopiaSql

[Service]
Type=oneshot
ExecStart=/bin/bash /usr/share/nginx/html/scripts-systemd/hello-world.sh

[Install]
WantedBy=multi-user.target

hello-world.timer

[Unit]
Description=Runs every 2 minutes test.sh

[Timer]
OnCalendar=*:0/2
Unit=hello-world.service

[Install]
WantedBy=timers.target

Спасибо всем за помощь!

1 Ответ

0 голосов
/ 09 октября 2019

У меня есть первая служба начальной загрузки, которая отображается на консоли и выглядит следующим образом:

[Unit]
After=multi-user.target
# tty getty service login promts for tty1 & tty6
# will not be seen until this install completes.
Before=getty@tty1.service getty@tty6.service

[Service]
Type=oneshot
ExecStart=/bin/bash -c "export TERM=vt100;/var/ssi/firstboot_install.sh"
StandardOutput=tty
StandardInput=tty

[Install]
WantedBy=multi-user.target

Мой скрипт, который запускается, также имеет этот код для запуска

#---------------------------------------------------------------------
# Switch to tty6 so input is allowed from installation questions
# Change back to tty1 at end of this script to show normal booting
# messages from systemd.
#---------------------------------------------------------------------
exec < /dev/tty6 > /dev/tty6
chvt 6

наконец этого сценария. Я изменяю его обратно

# Now that the system has been registered and has a few channels added,
# I can have the installation go back to the main Anaconda output screen
# on tty1
chvt 1
exec < /dev/tty1 > /dev/tty1

exit 0

Это может быть не совсем то, что вы хотите, но вы можете адаптировать его к вашим потребностям. Цель здесь - отобразить что-то на консоли, которая запускается во время загрузки. Мой скрипт, который задает несколько вопросов об установке, где ввод не разрешен на tty1 (консоль), поэтому я перехожу на tty6, поэтому ввод разрешен при первой загрузке.

Ваш скрипт пытается:

#!/bin/bash

exec < /dev/tty6 > /dev/tty6
chvt 6

while $(sleep 30);
do
  echo "hello world"
done

chvt 1
exec < /dev/tty1 > /dev/tty1

Это может быть излишним для того, что вы пытаетесь сделать, но если вам нужен ввод с консоли, вы должны сделать то же самое с tty6

...