Class Shell

java.lang.Object
org.apache.zookeeper.Shell
Direct Known Subclasses:
Shell.ShellCommandExecutor

public abstract class Shell extends Object
A base class for running a Unix command. Shell can be used to run unix commands like du or df. It also offers facilities to gate commands by time-intervals.
  • Field Details

    • USER_NAME_COMMAND

      public static final String USER_NAME_COMMAND
      a Unix command to get the current user's name
      See Also:
    • SET_PERMISSION_COMMAND

      public static final String SET_PERMISSION_COMMAND
      a Unix command to set permission
      See Also:
    • SET_OWNER_COMMAND

      public static final String SET_OWNER_COMMAND
      a Unix command to set owner
      See Also:
    • SET_GROUP_COMMAND

      public static final String SET_GROUP_COMMAND
      See Also:
    • timeOutInterval

      protected long timeOutInterval
      Time after which the executing script would be timedout
    • ULIMIT_COMMAND

      public static final String ULIMIT_COMMAND
      a Unix command to get ulimit of a process.
      See Also:
    • WINDOWS

      public static final boolean WINDOWS
      Set to true on Windows platforms
  • Constructor Details

    • Shell

      public Shell()
    • Shell

      public Shell(long interval)
      Parameters:
      interval - the minimum duration to wait before re-executing the command.
  • Method Details

    • getGroupsCommand

      public static String[] getGroupsCommand()
      a Unix command to get the current user's groups list
    • getGroupsForUserCommand

      public static String[] getGroupsForUserCommand(String user)
      a Unix command to get a given user's groups list
    • getGET_PERMISSION_COMMAND

      public static String[] getGET_PERMISSION_COMMAND()
      Return a Unix command to get permission information.
    • getUlimitMemoryCommand

      public static String[] getUlimitMemoryCommand(int memoryLimit)
      Get the Unix command for setting the maximum virtual memory available to a given child process. This is only relevant when we are forking a process from within the Mapper or the Reducer implementations. Also see Hadoop Pipes and Hadoop Streaming. It also checks to ensure that we are running on a *nix platform else (e.g. in Cygwin/Windows) it returns null.
      Parameters:
      memoryLimit - virtual memory limit
      Returns:
      a String[] with the ulimit command arguments or null if we are running on a non *nix platform or if the limit is unspecified.
    • setEnvironment

      protected void setEnvironment(Map<String,String> env)
      set the environment for the command
      Parameters:
      env - Mapping of environment variables
    • setWorkingDirectory

      protected void setWorkingDirectory(File dir)
      set the working directory
      Parameters:
      dir - The directory where the command would be executed
    • run

      protected void run() throws IOException
      check to see if a command needs to be executed and execute if needed
      Throws:
      IOException
    • getExecString

      protected abstract String[] getExecString()
      return an array containing the command name and its parameters
    • parseExecResult

      protected abstract void parseExecResult(BufferedReader lines) throws IOException
      Parse the execution result
      Throws:
      IOException
    • getProcess

      public Process getProcess()
      get the current sub-process executing the given command
      Returns:
      process executing the command
    • getExitCode

      public int getExitCode()
      get the exit code
      Returns:
      the exit code of the process
    • isTimedOut

      public boolean isTimedOut()
      To check if the passed script to shell command executor timed out or not.
      Returns:
      if the script timed out.
    • execCommand

      public static String execCommand(String... cmd) throws IOException
      Static method to execute a shell command. Covers most of the simple cases without requiring the user to implement the Shell interface.
      Parameters:
      cmd - shell command to execute.
      Returns:
      the output of the executed command.
      Throws:
      IOException
    • execCommand

      public static String execCommand(Map<String,String> env, String[] cmd, long timeout) throws IOException
      Static method to execute a shell command. Covers most of the simple cases without requiring the user to implement the Shell interface.
      Parameters:
      env - the map of environment key=value
      cmd - shell command to execute.
      timeout - time in milliseconds after which script should be marked timeout
      Returns:
      the output of the executed command.o
      Throws:
      IOException
    • execCommand

      public static String execCommand(Map<String,String> env, String... cmd) throws IOException
      Static method to execute a shell command. Covers most of the simple cases without requiring the user to implement the Shell interface.
      Parameters:
      env - the map of environment key=value
      cmd - shell command to execute.
      Returns:
      the output of the executed command.
      Throws:
      IOException