Сделайте я правильно понимаю, что не возможно работать /etc/cron.daily/my
от произвольного пользователя это будет выполнено только от root
согласно /etc/crontab
?
Я могу отбросить полномочие пользователя root определенному пользователю в моем документе на получение крона вместо этого?
Лучше поместить задание крона в /etc/cron.d
? Как:
$ cat /etc/cron.d/my
5 0 * * * user test -x /usr/bin/my && /usr/bin/my -cfg /etc/my.cfg
Вы правы, задания в /etc/cron.daily
(и еженедельно/ежемесячно, и т.д.), всегда выполняются как пользователь root
но Вы можете просто swith пользователь из сценария и вызова что очень сценарий снова как тот другой пользователь, включая все переданные аргументы (хотя не будет никого в a cron.daily
задание):
Файл /etc/cron.daily/my
:
#!/bin/sh
# If started as root, then re-start as user "gavenkoa":
if [ "$(id -u)" -eq 0 ]; then
exec sudo -H -u gavenkoa $0 "$@"
echo "This is never reached.";
fi
echo "This runs as user $(id -un)";
# prints "gavenkoa"
exit 0;
Когда сценарий запускается как пользователь root
это обнаружит так и повторно выполнит себя через sudo -H -u gavenkoa
, это: как пользователь gavenkoa
. Это не требует никаких специальных записей в /etc/sudoers
потому что root
всегда позволяется переключиться на любого пользователя.
exec
заменяет текущий процесс новым sudo …
звоните и никогда не возвращается. Вот почему Вам не нужно else
пункт.