Ich kann das folgende Shell-Skript wie erwartet von der Eingabeaufforderung aus ausführen:
/bin/sh -xv /home/shantanu/backup_transfer.sh
Aber wenn ich es in einem Cron einstelle, wird es nicht richtig ausgeführt. Es gibt 2 Befehle. ssh -t[email geschützt]„sudo ls“ und sudo rsync -avze zu einem anderen Server.
Warum würde ein Shell-Skript in einem Cron fehlschlagen, wenn es in der Eingabeaufforderung erfolgreich ausgeführt wird?
$ which sh
/bin/sh
Verwende ich die richtige Umgebung?
Aktualisieren:
Error for the first ssh -t command:
Pseudo-terminal will not be allocated because stdin is not a terminal.
sudo: sorry, you must have a tty to run sudo
Error for the second sudo rsync command:
sudo: sorry, you must have a tty to run sudo
Beim Ausführen des Skripts in der Eingabeaufforderung ist kein Fehler aufgetreten.
Antwort1
Um den Sudo-TTY-Fehler zu beheben, müssen Sie die Datei /etc/sudoers auf dem Host ändern, auf dem Sie den Sudo-Befehl ausführen.
#Here is an example of how to turn off the requirement of a tty for a user called "USERNAME"
Defaults:USERNAME !requiretty
Antwort2
Die beste Option besteht darin, /etc/sudoers zu aktualisieren und !requiretty einzufügen. In bestimmten Fällen haben Sie jedoch möglicherweise keinen Zugriff auf das Remote-System, um requiretty in /etc/sudoers zu aktivieren/deaktivieren.
In diesen Situationen können Sie als Workaround ein doppeltes tt verwenden. Ein doppeltes tt funktioniert sogar in cron.
ssh -tt user@remoteserver /some/dir/remotecommand