추가 읽기

추가 읽기

오래된 sqlrelay 연결 서비스를 모두 다시 시작하기 위해 systemd.timer를 사용하려고 합니다. Systemd 서비스는 다음과 같습니다.

[Unit]
Description=sqlrelay-state-connection-restart

[Service]
Type=oneshot
User=sqlrelay
ExecStart=/bin/ps -eo pid,etimes,cmd  | /bin/awk '$2 >=100 && $3=="sqlr-connection"  {printf "sqlrelay@%s.target\n", $9}' | /usr/bin/sudo /bin/xargs -r /bin/systemctl restart

시간제 노동자:

[Timer]
OnCalendar=*-*-* *:0/5:0

[Install]
WantedBy=timers.target

sudoers 파일에 Nopasswd를 사용하여 sqlrelay 사용자를 추가했습니다.

타이머는 오류 없이 정상적으로 시작됩니다. 하지만 서비스를 사용하면 로드되지 않습니다. 로그에는 다음이 표시됩니다.

Apr 23 23:10:00 ****.com systemd[1]: sqlrelay-stale-restart.service failed to run 'start' task: Operation not supported
Apr 23 23:10:00 ****.com systemd[1]: Failed to start sqlrelay-state-connection-restart.
Apr 23 23:15:00 ****.com systemd[1]: sqlrelay-stale-restart.service: main process exited, code=exited, status=1/FAILURE
Apr 23 23:15:00 ****.com systemd[1]: Failed to start sqlrelay-state-connection-restart.
Apr 23 23:15:00 ****.com systemd[1]: Unit sqlrelay-stale-restart.service entered failed state.
Apr 23 23:15:00 ****.com systemd[1]: sqlrelay-stale-restart.service failed.

가끔 sqlrelay 사용자의 작업이 허용되지 않는 상황이 발생합니다. 루트로 실행할 수 있도록 sqlrelay 사용자를 제거하면 "유닛이 실패 상태로 들어갔습니다" 오류가 발생합니다.

답변1

Bash 스크립트에 넣고 ExecStart에서 스크립트를 호출하여 문제를 해결했습니다. 여기서 문제는 파이프 명령을 ExecStart와 함께 직접 사용해서는 안 된다는 것입니다. 서브쉘을 사용해야 합니다

예:

ExecStart=/bin/sh -c 'ps -eo ...| ....|.. '

답변2

ExecStart.INI 파일의 키 값쉘 스크립트가 아님.

추가 읽기

  • Lennart Petlinget al. (2019). "명령줄". 시스템 서비스. 시스템 매뉴얼 페이지.

관련 정보