왜 cron에서 직접 프로그램을 시작할 수 없나요?

왜 cron에서 직접 프로그램을 시작할 수 없나요?

저는 현재 Debian wheezy를 IRC 서버로 실행하는 라즈베리 파이를 설정하고 있습니다. 부팅 시 일반 사용자로 두 개의 프로그램(ngircd 및 atheme)을 실행합니다.

ngircd와 atheme은 모두 로그인합니다./var/log/syslog

/usr/local/sbin/ngircd ngircd는 Atheme( )과 마찬가지로 실행 파일( ) 자체에서 시작됩니다 /home/user/atheme/bin/atheme-services. 터미널에서 사용자가 프로그램을 수동으로 시작하면 문제 없이 작동합니다.

cron에서 ngircd(설치된 위치 사용)를 시작하려고 하면 시작되지 않습니다. /var/log/syslogcron 작업이 실행되었지만 아무 일도 일어나지 않고 오류 메시지나 ngirc 관련 로그가 전혀 없다고 말합니다. Atheme은 잘 시작됩니다.

그러나 ngird(이전에 사용한 것과 동일한 경로 사용)만 실행하는 스크립트를 만들고 이를 cron에 추가하면 제대로 작동합니다(직접 실행하는 것처럼). ngircd가 cron에서 시작되지 않는 이유는 무엇입니까?

큰 문제는 아니지만 시스템이 내가 원하는 것보다 약간 더 복잡해졌습니다. 두 프로그램이 다르게 동작하는 것도 이상합니다.

답변1

저는 논평할 권한이 없으므로 설명을 요청할 수는 없지만 cron이 아닌 initscript나 rc.local에서 데몬을 실행하는 것이 좋습니다. Cron은 일반적으로 작업을 실행하는 데 사용됩니다.특정 시간에, 정기적으로. 데몬 및 서비스 처리는 일반적으로 귀하의 작업입니다.시스템 초기화.

부팅 시 일반 사용자로 무언가를 실행하려면:

이것을 다음에 추가하십시오/etc/rc.local:

/bin/su -c '/path/to/your/executable args &' -s /bin/bash username >/dev/null 2>&1

답변2

Cron은 다음과 똑같이 동작하는 것을 실행합니다.

sudo - user /path/to/command

또는

su user
/path/to/command

명령이 실행되는지 확인하려면 이 방법으로 테스트해야 합니다.

다음을 사용하여 user-crontab을 편집할 수 있습니다.

crontab -e

또는 시스템 전체의 crontab뿌리~와 함께

nano /etc/crontab

또는 당신이 가장 좋아하는 편집자 외에나노(필요한 경우 앞에 추가 sudo) 시스템 전체의 crontab에는 명령을 실행할 사용자를 지정하는 실행 시간과 명령 사이에 추가 열이 있다는 점에서 이 두 crontab의 구문이 다릅니다. 실행 시간을 다음과 같이 설정하려고 합니다 @reboot.

@reboot user /usr/local/sbin/ngircd
@reboot user /home/user/atheme/bin/atheme-services

usercrontab을 사용하여 사용자 crontab을 편집하는 경우 해당 단어를 삭제하세요 crontab -e.

대안으로, 보유하고 있는 시스템에 따라 System V의 initscripts 또는 systemd의 서비스 제어 파일을 사용할 수 있습니다.

관련 정보