crontab에서 virsh 명령어로 가상머신을 구동하거나 종료하려는데 오류가 발생하는 경우가 있습니다. QEMU/KVM crontab virsh 명령어 적용 방법을 살펴보겠습니다.
목차
crontab에서 virsh start 작동하지 않는 현상
crontab에서 가상머신 구동을 위해 virsh start 명령어를 아래와 같이 작성했습니다.
8 2 * * * /usr/bin/virsh start my-vm
기다리던 시간이 됐는데 실행이 되지 않습니다. /var/log/syslog를 열어서 해당 시간을 확인해 보았습니다. 아래와 같은 오류가 발생했습니다. Permission denied 보이시죠?
Jul 1 02:08:01 naru-ubuntu CRON[3538539]: (naru) CMD (/usr/bin/virsh start my-vm)
Jul 1 02:08:01 naru-ubuntu libvirtd[3538544]: libvirt version: 8.0.0, package: 1ubuntu7.10 (Marc Deslauriers marc.deslauriers@ubuntu.com Fri, 12 Apr 2024 13:48:21 -0400)
Jul 1 02:08:01 naru-ubuntu libvirtd[3538544]: hostname: my-machine
Jul 1 02:08:01 naru-ubuntu libvirtd[3538544]: Failed to open file '/sys/kernel/security/apparmor/profiles': Permission denied
Jul 1 02:08:01 naru-ubuntu libvirtd[3538544]: Failed to read AppArmor profiles list '/sys/kernel/security/apparmor/profiles': Permission denied
Jul 1 02:08:01 naru-ubuntu libvirtd[3538544]: Failed to open file '/sys/kernel/security/apparmor/profiles': Permission denied
Jul 1 02:08:01 naru-ubuntu libvirtd[3538544]: Failed to read AppArmor profiles list '/sys/kernel/security/apparmor/profiles': Permission denied
Jul 1 02:08:01 naru-ubuntu libvirtd[3538544]: internal error: Unable to get session bus connection: Cannot autolaunch D-Bus without X11 $DISPLAY
로그를 캡쳐한 부분을 아래에 첨부합니다.

느낌이 오시나요? root 권한으로 실행해야 하는데, 일반 사용자 계정으로 crontab을 작성했기 때문에 발생한 문제였습니다.
일반 사용자 계정으로 crontab 명령어를 이용하면 해당 이용자의 권한을 가지고 실행하게 됩니다. 지금 로그에 찍힌 걸 보면 /sys/kernel에 접근하려고 합니다. /sys/kernel은 root만 접근할 수 있습니다.
crontab virsh 명령어 실행을 위한 설정 방법
따라서 root 권한으로 실행되는 crontab을 사용하려면 sudo crontab -e 명령어를 이용해서 root 계정의 crontab 스크립트를 작성해 주어야 합니다.
sudo crontab -e
Bashcrontab과 sudo crontab은 실행되는 권한이 각각 해당 사용자와 root 계정으로 다르다는 점 꼭 기억해 두시기 바랍니다.
관련 자료
Stackoverflow의 linux difference between “sudo crontab -e” and just “crontab -e” 문서를 참고했습니다.