cron에서 실행된 스크립트에서 재부팅을 시도할 때 Ubuntu 18.04 "/dev/initctl을 열 수 없습니다: 권한이 거부되었습니다"

cron에서 실행된 스크립트에서 재부팅을 시도할 때 Ubuntu 18.04 "/dev/initctl을 열 수 없습니다: 권한이 거부되었습니다"

오류 발생 후 컴퓨터를 다시 시작하는 Python 프로그램이 있습니다.

main.py:

import os

if (some_error):
    os.system('/sbin/reboot')

이를 작동시키기 위해 NOPASSWD이 스크립트를 실행하는 사용자를 위한 sudoers 파일을 추가했습니다.

/etc/sudoers:

adam ALL=NOPASSWD:/sbin/reboot

Python 프로그램은 충돌이 발생한 경우에도 계속 실행되도록 간단한 bash 스크립트를 통해 실행됩니다.

실행.sh:

#!/bin/bash

myscript(){
    python3 main.py > log 2>&1
}

until myscript; do
    echo "program crashed with exit code $?. Restarting..." >&2
    sleep 1
done

run.sh스크립트는 재부팅 시 cron 파일을 통해 실행됩니다.

/etc/cron.d/my_cron_file:

@reboot adam cd /home/adam && ./run.sh

이제 내 문제는 다음과 같습니다. CLI에서 실행하거나 직접 실행하면 run.sh제대로 main.py작동하고 재부팅됩니다. 그러나 @reboot에서 cron 파일을 통해 실행하면 다음과 같이 출력됩니다.

Failed to set wall message, ignoring: Interactive authentication required.
Failed to reboot system via logind: Interactive authentication required.
Failed to open /dev/initctl: Permission denied
Failed to talk to init daemon.

프로세스를 검사해 보니 ps auxCLI에서 실행할 때 작동하는 것처럼 명시적으로 권한이 있는 사용자로 실행되고 있습니다. 그렇다면 cron을 사용하여 실행할 때 왜 작동하지 않습니까?adam/sbin/reboot

관련 정보