Ubuntu 18.04 尝试从 cron 运行的脚本重新启动时出现“无法打开 /dev/initctl:权限被拒绝”

Ubuntu 18.04 尝试从 cron 运行的脚本重新启动时出现“无法打开 /dev/initctl:权限被拒绝”

我有一个 Python 程序,在出现错误后会重新启动计算机:

主要.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 aux下运行,因为它在从 CLI 运行时可以工作。那么为什么它在使用 cron 运行时不起作用呢?adam/sbin/reboot

相关内容